#angular #micro-frontend #webpack-module-federation
Вопрос:
Мы создаем угловое приложение MFE с использованием модуля Federation WebPack 5 и столкнулись с проблемой с путем к источнику изображения. Когда мы запускаем МФЭ только изображение загружается( localhost:5000/assets/../angular.png
), но когда мы запускаем хост/раковина приложение, изображение не загружается на МТЭ с МКЭ работает в другой порт(5000) и Shell работает в другой порт(4200) и приложение пытается получить доступ к изображению из оболочки ОС папки( localhost:4200/assets/../angular.png
), когда мы запускаем оболочку приложения.
У нас есть два варианта на выбор:
- Переместите эти изображения в общую папку за пределами MFE и обратитесь
- установите путь к изображению динамически, используя базовый путь из файла конфигурации
Мы использовали приведенный ниже пример для моего тестирования, но в приведенном ниже примере файл angular.png доступен как в MFE1, так и в оболочке, но если мы удалим его из оболочки, он не будет работать при загрузке приложения оболочки.
Образец исходного справочного кода (спасибо @manfred steyer)
Есть ли какое-либо другое решение в MFE для решения этой проблемы?
Ответ №1:
Проблема в том, что изображения импортируются с использованием относительных путей. Поскольку микро-интерфейсы всегда загружаются внутри оболочки, эти пути будут ссылаться на ресурсы оболочки. Чтобы устранить проблему, вам нужно будет добавить полный 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'" />
Комментарии:
1. вы правы, но этот базовый URL-адрес будет отличаться в зависимости от среды(QA, UAT, PROD), верно? как это можно решить?
2. Просто обновил свой ответ, надеюсь, это поможет 🙂