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 的资产文件夹 ( ) 访问图像。
我们手头有两个选择:
我们使用下面的示例进行测试,但在下面的示例中,angular.png 文件在 MFE1 和 Shell 中都可用,但如果我们从 Shell 中删除它,则在加载 shell 应用程序时它将无法工作。
源参考代码示例(感谢@manfredsteyer)
MFE 中还有其他解决方案可以解决此问题吗?
问题是图像是使用相对路径导入的。由于微前端始终加载到 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)