Angular MFE - WebPack5 - 模块联合 - 图像路径问题

Kep*_*ppy 7 angular micro-frontend webpack-module-federation

我们正在使用 Module Federation WebPack 5 创建一个 MFE 角度应用程序,但最终出现了图像源路径问题。当我们单独运行 MFE 时,图像正在加载(localhost:5000/assets/../angular.png),但是当我们运行主机/shell 应用程序时,MFE 不会加载图像,因为 MFE 运行在不同的端口(5000)并且 Shell 运行在不同的端口( 4200),localhost:4200/assets/../angular.png当我们运行 shell 应用程序时,应用程序尝试从 Shell 的资产文件夹 ( ) 访问图像。

我们手头有两个选择:

  1. 将这些图像移至 MFE 外部的公共文件夹并参考
  2. 使用配置文件中的基本路径动态设置图像路径

我们使用下面的示例进行测试,但在下面的示例中,angular.png 文件在 MFE1 和 Shell 中都可用,但如果我们从 Shell 中删除它,则在加载 shell 应用程序时它将无法工作。

源参考代码示例(感谢@manfredsteyer)

MFE 中还有其他解决方案可以解决此问题吗?

Sti*_*peJ 7

问题是图像是使用相对路径导入的。由于微前端始终加载到 shell 内,因此这些路径将引用 shell 的资产。要解决此问题,您需要将完整的 URL 添加到图像中,以便从正确的微前端加载它。

如果你想在微前端加载图像,它应该如下所示:

<img src="http://localhost:5000/assets/image.png" />
Run Code Online (Sandbox Code Playgroud)

要调整生产或开发的基本 url,您可以在服务中编写一个可以注入到组件中的方法。它可能看起来像这样:

public getImageBaseUrl(): string {
  if (environment.production) {
    return "http://someurl.com/assets/";
  } else {
    return "http://localhost:5000/assets/";
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在 HTML 模板中调用该方法:

<img [src]="getImageBaseUrl() + 'image.png'" />
Run Code Online (Sandbox Code Playgroud)