Вопрос или проблема
В нашем проекте на Angular мы использовали пакет xlxs версии 0.18.5, так как в нем была уязвимость от checkmarxOne. Мы обнаружили, что реестр для пакета xlsx изменился. Заменили версию на “0.20.3”, указав нижеприведенный URL в package.json – https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz
После этого изменения я не могу скачать отчет Excel из приложения, в инструментах разработчика появляется ошибка, как показано ниже.
Ошибка: Неудовлетворительная версия 0.20.3 от xxxxx из общего одиночного модуля xlsx (требуемая =0.20.3/xlsx-0.20.3.tgz). Затем я обновил нижеуказанную запись в webpack.config.js. Это работает для некоторых микро-фронтендов, но не для всех.
Я несколько раз проверял webpack.config.js, первоначально я обновил requiredversion: 0.20.3, а затем сменил на “0.20.3/xlsx-0.20.3.tgz”. Однако ошибка все еще остается. Я не хочу оставлять strictVersion: false в webpack.config.js. Есть ли какое-либо решение для этого? Заранее спасибо.
Ошибка в инструментах разработчика показана ниже на скриншоте.
Ответ или решение
Судя по предоставленной информации, вы столкнулись с проблемой несовместимости версии модуля xlsx
в вашей конфигурации Webpack Module Federation. Рассмотрим, как можно решить эту проблему.
Анализ проблемы
Вы обновили версию xlsx
до 0.20.3
, но в результате началась ошибка: Unsatisfied version 0.20.3 from xxxxx of shared singleton module xlsx
. Это показывает, что ваша текущая сборка Webpack не может удовлетворить требование, касающееся совместимости версий модуля xlsx
.
Шаги для решения
-
Проверьте все микрофронтенды:
Убедитесь, что все микрофронтенды, которые используют модульxlsx
, обновлены до версии0.20.3
. Если у вас есть микрофронтенды, которые все еще используют старую версиюxlsx
, это может вызывать конфликт версий. -
Проверьте конфигурацию
webpack.config.js
:
Убедитесь, что вы правильно задали конфигурацию дляModule Federation
. Например:shared: { xlsx: { singleton: true, strictVersion: true, requiredVersion: '0.20.3', }, }
В этом варианте
strictVersion
установлен вtrue
, что означает, что все микрофронтенды должны использовать именно эту версиюxlsx
. -
Используйте корректный адрес:
Убедитесь, что ваше приложение может загрузить пакетxlsx
из указанного URL (https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz). Проверьте это, открыв адрес в браузере. Если адрес недоступен или содержит ошибки, это может вызвать проблемы в загрузке модуля. -
Очистка кэша и пересборка:
Возможно, стоит очистить кэш npm и пересобрать проект. Вы можете сделать это с помощью следующих команд:npm cache clean --force npm install
-
Проверьте зависимости:
Иногда бывает полезно создать резервную копиюpackage-lock.json
иnode_modules
, затем удалить их и снова выполнитьnpm install
. -
Логирование и диагностика:
Проверьте логи вашего приложения и сетевые запросы в инструментах разработчика, чтобы увидеть, загружается ли модульxlsx
корректно или возникают ошибки. -
Тестирование:
Если изменения все еще не решают проблему, попробуйте временно установитьstrictVersion
вfalse
для проверки. Это не является долгосрочным решением, но позволит вам временно обойти проблему и выявить, где именно возникает конфликт.
Заключение
Следуя вышеуказанным шагам, вы сможете исправить ошибку с несовместимостью версии модуля xlsx
. Чтобы гарантировать, что все микрофронтенды используют совместимые версии библиотек, необходимо тщательно следить за их зависимостями. Если проблема не решается, рекомендуется обратиться за дополнительной поддержкой к сообществам разработчиков или документации Webpack.