Федерация модулей Webpack. Неудовлетворенная версия 11.xx общего одноэлементного модуля @angular/common (требуется ^7.2.0)
Я пытаюсь заставить мое довольно сложное монолитное приложение работать с Module Federation. Конфигурация моего веб-пакета выглядит так
plugins: [
new ModuleFederationPlugin({
remotes: {
"mfe1": "mfe1@http://localhost:3000/remoteEntry.js",
},
shared: {
"@angular/core": { singleton: true, strictVersion: true },
"@angular/common": { singleton: true, strictVersion: true },
"@angular/router": { singleton: true, strictVersion: true },
...sharedMappings.getDescriptors()
}
}),
sharedMappings.getPlugin(),
],
То же самое и со стороны Micro Frontend. Когда я пытаюсь запустить приложение, я получаю:
Ошибка: неудовлетворенная версия 11.2.1 общего одноэлементного модуля @angular / common (требуется ^7.2.0)
До этого я получал аналогичное сообщение об ошибке, но для angular / core. Я исправил это, повторно запустив yarn и исправив все предупреждения, выдаваемые библиотеками в зависимости от другой версии angular / core.
Но с ошибкой fpr angular / common я застрял. Я понятия не имею, как узнать, какая библиотека могла бы вызвать эту ошибку.
3 ответа
Вам, вероятно, следует указать
requiredVersion
Что произойдет, так это то, что всякий раз, когда вы импортируете сторонний модуль, который использует angular, он просканирует package.json для этого модуля и добавит другое сопоставление диапазона версий входа на основе этого. Это, вероятно, вызовет нежелательное поведение и может быть причиной того, что вы видите.
На данный момент у вас есть
singleton: true
который перезаписывает разные версии пакетов. Один вариант — использовать одинаковую версию пакета для всех микрофронтендов, а второй — можно немного изменить.
shared
синтаксис. Попробуйте что-то вроде этого:
shared: [ "@angular/core", "@angular/common", "@angular/router", ...sharedMappings.getDescriptors() ]
Установка strictVersion значения true вместе с Singleton:true приведет к сбою приложения, если микроинтерфейс не получит точную версию общего артефакта от хоста.
Чтобы это исправить, установите для strictVersion значение false . и добавьте требуемую версию, требуемая версия также принимает в качестве значения диапазон поддерживаемых версий.
Пример: '@angular/core': { Singleton: true,strictVersion: false,requireVersion: '14.0.0', }