Инструкции
Оптимизация библиотечных PBC

Оптимизация библиотечных PBC: что делать командам

Инструмент — qpalette pbc (часть @diasoft/qpalette-cli). Все правки — настройки сборки, без изменения кода продуктов.

Автоматизация пока пилотируется. Включение optimize и deliver в общие скрипты сборки и публикации (конвейер) появится позже. Инструкции ниже — ручной режим для тех, кто не хочет ждать: все команды можно запускать у себя уже сейчас.

Установка CLI

Глобально:

npm install -g @diasoft/qpalette-cli@8 --@diasoft:registry=http://repolib-main.diasoft.ru:8081/repository/diasoft-npm-packages/

Или однократно, без установки:

npx -y --@diasoft:registry=http://repolib-main.diasoft.ru:8081/repository/diasoft-npm-packages/ -p @diasoft/qpalette-cli@8 qpalette pbc --help
⚠️

На продукте Q.Palette 7 CLI всё равно ставьте восьмой версии.

Суть в двух строках

  • Поставщик библиотечного PBC: qpalette pbc optimize --apply в своём репозитории перед публикацией.
  • Потребитель чужих библиотечных: ничего ждать не нужно — qpalette pbc deliver ужимает и чужие неоптимизированные пакеты.

Если вы поставщик (свой библиотечный PBC)

  1. Запустите qpalette pbc optimize — команда покажет, что снимется и сколько останется, и спросит подтверждение. Повторные запуски — с флагом --apply.
  2. Пересоберитесь и опубликуйтесь как обычно. Подключение оптимизации в общий скрипт публикации publish-pbc.js пока пилотируется — до него команда запускается вручную в своём репозитории.

Что делает optimize:

  • в правила копирования вложенных PBC (angular.json, glob: "**/*") добавляет ignore: шрифты (*.woff/woff2/ttf/eot), иконочные наборы (pi.svg, qi.svg, primeicons.svg), *.css, *.map, отладочный Monaco (monaco-editor/dev, min-maps), index.html;
  • включает минификацию как в production (optimization + buildOptimizer);
  • вырезает карты кода;
  • чинит манифест публикации: переносит dependencies в публикуемый package.json — без этого npm не поставит потребителю вложенные пакеты.

Чего не делать:

  • не копировать вложенные пакеты глобом **/* без ignore — это источник раздувания;
  • картинки внутри чужих копий и уведомления о лицензиях не удалять: первые могут собираться в рантайме, вторые запрещают сами лицензии. Команда показывает их отдельным списком.

Если вы потребитель (подключаете чужие библиотечные)

  1. qpalette pbc optimize --apply у себя и пересборка — снимает больше половины веса (для qvacui-lib: 1423 → 600 МБ).
  2. qpalette pbc deliver — прогоните перед упаковкой каталога раздачи в образ ui-микросервиса. Заменяет копии ссылками в хранилище libraries/ внутри образа, Monaco кладёт одним экземпляром, оставляет на диске только сжатое (gzip — нужен образ с gzip_static, появится в ближайшем выпуске платформы). Результат на стенде: ~124 МБ вместо 1,4 ГБ; если поставщики тоже прогнали optimize — ~89 МБ. Штатным шагом сборки образа команда станет после пилота автоматизации — пока запускается вручную.

Как это работает: привычные адреса сохраняются

Менять обращения к бандлам не нужно — ни на этом шаге, ни вообще для эффекта веса: по умолчанию каталог копии становится символической ссылкой: assets/qmpart → libraries/@diasoft/qmpartui-lib@2.2.196. nginx читает ссылки как обычные пути, поэтому запросы к прежним адресам /api/<сервис>/<компонент>/assets/… отдаются из хранилища, если оно есть, ничего дополнительно настраивать не нужно.

Эффект-ориентир (по qvacui-lib@0.0.266)

СценарийНа стенде
как есть1423 МБ
потребитель: optimize + пересборка600 МБ
потребитель: + deliver при сборке образа124 МБ
поставщики тоже прогнали optimize89 МБ
цель: общий рантайм поколения (эталон)37 МБ

Контроль

qpalette pbc analyze --dist <каталог> — разбор любого пакета: дерево вложенных, повторы, из чего складывается вес и сколько даст каждый шаг. Ничего не меняет, работает на любом каталоге — удобно проверять себя до и после.