ng-packagr — инструмент для сборки Angular-библиотек в
формате, совместимом с Angular Package Format (APF). Он используется
внутри Angular CLI и обеспечивает корректную публикацию библиотек для
повторного использования.
Основные задачи ng-packagr:
.metadata.json.d.tsРезультатом является пакет, готовый к установке через npm и использованию в любом Angular-приложении.
Типичная структура проекта библиотеки:
projects/
my-lib/
src/
lib/
my-lib.module.ts
my-lib.component.ts
public-api.ts
ng-package.json
Файл public-api.ts определяет публичный контракт
библиотеки.
Минимальная конфигурация:
{
"$schema": "../. ./node_modules/ng-packagr/ng-package.schema.json",
"dest": "../. ./dist/my-lib",
"lib": {
"entryFile": "src/public-api.ts"
}
}
Через этот файл управляется сборка без прямого вмешательства в webpack.
Сборка запускается командой Angular CLI:
ng build my-lib
CLI делегирует выполнение ng-packagr, который:
package.json в distБиблиотека может иметь дополнительные точки входа:
projects/my-lib/src/button/
button.module.ts
public-api.ts
Для них создаётся отдельный ng-package.json. Это
позволяет импортировать части библиотеки выборочно:
import { ButtonModule } from 'my-lib/button';
ng-packagr поддерживает копирование стилей и
ресурсов:
"assets": [
"src/styles",
"src/icons"
]
CSS и SCSS могут быть включены в сборку и доступны потребителю библиотеки.
BrowserModuleCommonModuleЭти ограничения обеспечивают предсказуемость и стабильность при подключении библиотеки в разные проекты.
После сборки каталог dist/my-lib полностью готов к
публикации:
npm publish dist/my-lib
ng-packagr гарантирует, что опубликованный пакет
соответствует ожиданиям Angular CLI и экосистемы, включая поддержку Ivy
и оптимизации сборки.