Библиотечные проекты
Оптимизированные версии пакетов

Оптимизированные версии библиотечных пакетов

Каждая сборка библиотечного PBC публикует в npm два пакета:

  • штатная версия — метка latest, полный состав, как раньше;
  • оптимизированная версия — метка minified, номер вида X.Y.Z-minified.N, где X.Y.Z — номер штатной версии той же сборки.

Результаты пилота

ПакетОптимизированнаяШтатная
@diasoft/qagrui-lib2,7 МБ225,9 МБ
@diasoft/qaccorui-lib9,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.