Частые ошибки при сборке UI-сервиса и их решения
🚫
Чтобы определить ошибку сборки UI-сервиса, необходимо раскрыть пункт "Сборка бандла продукта", в котором отражён полный лог сборки.
1. Конфликт версий зависимостей
Описание: Несовместимость версий пакетов, например:
npm ERR! Found: @angular/core@16.2.15
npm ERR! node_modules/@angular/core
npm ERR! @angular/core@"16.2.15" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer@angular/common@"^17.0.0" from @angular/compiler@17.0.13
npm ERR! node_modules/@angular/compiler
npm ERR! @angular/compiler@"17.0.13" from the root projectРешение:
- Самый простой способ: скопировать ошибку в ИИ. Он подскажет, какая конкретно зависимость с чем конфликтует.
- Можно проанализировать самостоятельно. В примере указано, что в проекте установлена устаревшая версия Angular (
@angular/core@16.2.15), а@angular/compiler@17.0.13требует более новую версию Angular (^17.0.0), которая несовместима с установленной. Для решения проблемы необходимо обновить все Angular-пакеты до единой версии 17.x.
2. Ошибка сборки: npm ERR! missing script: prod
Описание: Пайплайн при сборке UI-сервиса выполняет команду npm run-script prod, который отсутствует в package.json.
Решение:
- Необходимо добавить скрипт
prodвpackage.json. Стандартный пример:
"prod": "ng build --configuration production"3. Ошибка сборки: npm ERR! 404 Not Found - GET https://your-nexus-repo/repository/npm-group/some-package
Описание: Отсутствует пакет в repolib-main. Пример полной ошибки:
Решение:
- Написать на адрес
secure-sdlc@diasoft.ruс просьбой загрузить отсутствующий пакет.
4. Не публикуются пакеты в Nexus. Ошибка: Repository does not allow updating assets
Описание: Версия библиотеки в package.json совпадает с уже опубликованной версией в Nexus.
Решение:
- Необходимо поменять версию (патч, минорную или мажорную) в
package.json.
5. Не публикуются пакеты в Nexus. Ошибка: Cannot create a string longer than 0x1fffffe8 characters
Описание: Слишком большой размер публикуемого пакета.
Решение:
- Необходимо вынести все подобные конструкции:
"assets": [
{
"glob": "**/*",
"input": "node_modules/@diasoft/some-ui-lib",
"output": "assets/some"
}
]из projects.<YOUR_PROJECT>.architect.build.options в projects.<YOUR_PROJECT>.architect.build.configurations.production.
- Внутри конфигурации
buildвнутри виджетов необходимо прописать"assets": []. Собрать локально и вdistпосмотреть, сколько после этого виджеты будут весить (должны стать еще легче).
Статья будет дополняться...