Angular MFE - WebPack5 - 模块联合 - 图像路径问题
Angular MFE - WebPack5 - Module Federation - Image Path Issue
我们正在使用 Module Federation WebPack 5 创建 MFE angular 应用程序,但最终遇到了图像源路径问题。当我们单独 运行 MFE 时,图像正在加载(localhost:5000/assets/../angular.png
)但是当我们 运行 host/shell 应用程序时,图像不会为 MFE 加载,因为 MFE 是 运行ning 在不同的端口 (5000) 并且 Shell 运行ning 在不同的端口 (4200) 并且应用程序正在尝试从 Shell 的资产文件夹访问图像(localhost:4200/assets/../angular.png
) 当我们 运行 shell 应用程序时
我们手头有两个选择:
- 将这些图像移动到 MFE 之外的公共文件夹并参考
- 使用配置文件中的基本路径动态设置图像路径
我们使用下面的示例进行测试,但在下面的示例中,angular.png 文件在 MFE1 和 Shell 中都可用,但如果我们从 Shell 中删除它,它当我们加载 shell 应用程序时将无法工作。
Source Reference Code Sample(感谢@manfredsteyer)
MFE 中的任何其他解决方案可以解决此问题?
问题是图像是使用相对路径导入的。因为微前端总是在 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'" />
我们正在使用 Module Federation WebPack 5 创建 MFE angular 应用程序,但最终遇到了图像源路径问题。当我们单独 运行 MFE 时,图像正在加载(localhost:5000/assets/../angular.png
)但是当我们 运行 host/shell 应用程序时,图像不会为 MFE 加载,因为 MFE 是 运行ning 在不同的端口 (5000) 并且 Shell 运行ning 在不同的端口 (4200) 并且应用程序正在尝试从 Shell 的资产文件夹访问图像(localhost:4200/assets/../angular.png
) 当我们 运行 shell 应用程序时
我们手头有两个选择:
- 将这些图像移动到 MFE 之外的公共文件夹并参考
- 使用配置文件中的基本路径动态设置图像路径
我们使用下面的示例进行测试,但在下面的示例中,angular.png 文件在 MFE1 和 Shell 中都可用,但如果我们从 Shell 中删除它,它当我们加载 shell 应用程序时将无法工作。
Source Reference Code Sample(感谢@manfredsteyer)
MFE 中的任何其他解决方案可以解决此问题?
问题是图像是使用相对路径导入的。因为微前端总是在 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'" />