5

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

我们手头有两个选择:

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

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

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

MFE 中的任何其他解决方案可以解决此问题吗?

4

1 回答 1

3

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

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

<img src="http://localhost:5000/assets/image.png" />

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

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

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

<img [src]="getImageBaseUrl() + 'image.png'" />
于 2021-09-15T13:52:32.517 回答