3

假设我管理 2 个使用 Webpack 构建的 JavaScript 项目:

  • 一个叫做用户网站的网站
  • 一个名为External-Module的 JavaScript 模块

请注意,出于与微前端架构所述相同的原因,我使用了 2 个单独的项目。

我希望我的用户网站能够按需动态加载外部模块(使用任何 JavaScript 模块技术)。我的User-Website在构建时知道到达External-Module的 URL 。

我可以选择User-WebsiteExternal-Module所需的任何技术。

我正在寻找解决方案:

  • 这很容易实现(也许 Webpack 已经处理了 JSONP 来动态加载块?)
  • 这不会增加User-WebsiteExternal-Module的开销(例如JavaScript 模块看起来不错,但需要大量的 polyfill)

我的问题与https://github.com/webpack/webpack/issues/7526有关


我尝试在我的External-Module上使用 JSONP 库输出,但我不知道如何在User-Website中加载它。

我也在考虑在User-Website中使用SystemJS来动态加载External-Module

  • 我还可以用 Webpack 中的 SystemJS 替换内部 JSONP 机制(以节省在 m 包中使用 JSONP 机制)。
  • SystemJS看起来比RequireJS更好更现代
  • 这将需要添加SystemJSs.js仅)开销。我正在尝试尽可能少地使用依赖项。
4

1 回答 1

0

如果我没有收到问题,我很抱歉,但我最近根据您提供的链接中的文章制作了一个项目。chunk.js您不能只托管两个应用程序并在运行时加载其中的一部分吗?这就是这篇特定文章的示例的工作原理。文章中提供了一个示例。一些具有不同微前端的餐厅应用程序在运行时动态加载。这不正是您需要的吗?

下面的代码是这个特定示例的“核心”。看一看。

componentDidMount() {
    const { name, host } = this.props;
    const scriptId = `micro-frontend-script-${name}`;

    if (document.getElementById(scriptId)) {
      this.renderMicroFrontend();
      return;
    }

    fetch(`${host}/asset-manifest.json`)
      .then(res => res.json())
      .then(manifest => {
        const script = document.createElement('script');
        script.id = scriptId;
        script.src = `${host}${manifest['main.js']}`;
        script.onload = this.renderMicroFrontend;
        document.head.appendChild(script);
      });
  }
于 2020-02-16T10:17:15.023 回答