Оптимизация библиотечных 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)
- Запустите
qpalette pbc optimize— команда покажет, что снимется и сколько останется, и спросит подтверждение. Повторные запуски — с флагом--apply. - Пересоберитесь и опубликуйтесь как обычно. Подключение оптимизации в общий скрипт публикации
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— это источник раздувания; - картинки внутри чужих копий и уведомления о лицензиях не удалять: первые могут собираться в рантайме, вторые запрещают сами лицензии. Команда показывает их отдельным списком.
Если вы потребитель (подключаете чужие библиотечные)
qpalette pbc optimize --applyу себя и пересборка — снимает больше половины веса (для qvacui-lib: 1423 → 600 МБ).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 МБ |
поставщики тоже прогнали optimize | 89 МБ |
| цель: общий рантайм поколения (эталон) | 37 МБ |
Контроль
qpalette pbc analyze --dist <каталог> — разбор любого пакета: дерево вложенных, повторы, из чего складывается вес и сколько даст каждый шаг. Ничего не меняет, работает на любом каталоге — удобно проверять себя до и после.