Оптимизированные версии библиотечных пакетов
Каждая сборка библиотечного PBC публикует в npm два пакета:
- штатная версия — метка
latest, полный состав, как раньше; - оптимизированная версия — метка
minified, номер видаX.Y.Z-minified.N, гдеX.Y.Z— номер штатной версии той же сборки.
Результаты пилота
| Пакет | Оптимизированная | Штатная |
|---|---|---|
@diasoft/qagrui-lib | 2,7 МБ | 225,9 МБ |
@diasoft/qaccorui-lib | 9,3 МБ | 237 МБ |
Пилотный контур (поставщик — qagrui, потребитель — qalcui) собран, подключён и работает
на стенде без изменений кода и конфигурации продуктов.
Чем отличается оптимизированная версия
Из пакета исключаются копии вложенных библиотечных пакетов, карты кода, редактор Monaco и неиспользуемая статика. Вложенные библиотечные становятся обычными npm-зависимостями и ставятся при сборке потребителя, поэтому размер пакета снижается на порядки (например, с ~226 МБ до ~2,7 МБ).
Поведение бандлов не меняется: обращения к вложенным библиотекам остаются по прежним путям —
их содержимое в хранилище микросервиса возвращает команда qpalette pbc prepare при сборке
потребителя, а правила копирования в angular.json не меняются.
Оптимизированная версия собирается только для проектов с блоком lib-pbc в package.json —
теми же, для которых публикуется штатная версия. Если блок lib-pbc в вашем проекте не
описан, публикация пропускается; как её настроить — см.
Выпуск собственных библиотечных проектов.
Подключение оптимизированной версии
Оптимизированная версия появляется у пакета только если библиотечный выпускался после
включения оптимизации в пайплайне: у более ранних базовых версий метки minified нет.
Если оптимизированной версии для нужной базовой нет — попросите команду поставщика
перевыпустить библиотечный PBC: свежая сборка опубликует обе версии. До этого можно
работать на штатной версии — микросервис работает как прежде.
Потребитель указывает оптимизированную версию в зависимостях как обычный пакет — с тем же
номером базовой версии и меткой minified:
{
"dependencies": {
"@diasoft/qagrui-lib": "10.0.21-minified.1"
}
}Затем стандартно: npm install и сборка. Обновление — обычное: поднимаете номер базовой версии
и указываете её свежую метку minified (список версий смотрится через
npm view @diasoft/qagrui-lib versions).
Шаг подготовки в команде сборки
Оптимизированный пакет не содержит вложенных библиотек — их ставит npm. Чтобы сборка нашла их
на прежних путях, добавьте в команду сборки бандла шаг qpalette pbc prepare --apply между
установкой зависимостей и сборкой:
// Jenkinsfile, параметр pbcui_build_command_bundle
// [REGISTRY], [INSTALL_COMMAND] — плейсхолдеры пайплайна: реестр и установка
// зависимостей подставляются автоматически (по умолчанию npm ci --ignore-scripts --audit false).
// Если вашей команде сборки нужна другая команда установки — задайте весь параметр
// pbcui_build_command_bundle в Jenkinsfile и впишите её вместо плейсхолдера.
"npm set registry [REGISTRY]\n" +
"[INSTALL_COMMAND]\n" +
"npx --yes @diasoft/qpalette-cli@8 pbc prepare --apply\n" +
"npm run-script prod" // <-- здесь ваша команда сборки бандлаКоманда читает манифест qpalette.nested.json установленных пакетов и возвращает вложенные
на прежние пути символическими ссылками внутри node_modules — например,
node_modules/@diasoft/qagrui-lib/assets/qot становится ссылкой на установленный
node_modules/@diasoft/qotui-lib. Пакет снаружи выглядит как прежний полный: правила
копирования в angular.json и код не меняются. Обновлять базовый образ и правила nginx
не нужно — содержимое попадает в каталог раздачи и отдаётся с прежних адресов как обычные файлы.
Как публикуется оптимизированная версия
Правки в Jenkinsfile и коде репозитория библиотечного PBC не нужны — публикация выполняется
сборкой автоматически, все шаги применяются к рабочей копии конвейера. Оптимизированная версия
уезжает в npm из любой сборки вместе со штатной: штатная — под latest как прежде,
оптимизированная — под меткой minified.