Публикация в npm

Angular позволяет разрабатывать не только приложения, но и переиспользуемые библиотеки. Для публикации используется стандартный механизм npm. Процесс начинается с генерации библиотеки через Angular CLI:

ng generate library my-lib

Создаётся структура с отдельным projects/my-lib, собственным package.json и точкой входа public-api.ts.


Структура библиотеки и public API

Файл public-api.ts определяет, какие сущности будут доступны потребителю пакета:

export * from './lib/my-lib.module';
export * from './lib/components/button/button.component';

Экспорт только необходимых модулей и компонентов:

  • уменьшает размер бандла;
  • упрощает поддержку;
  • предотвращает использование внутренних реализаций.

Angular при сборке библиотеки ориентируется именно на этот файл.


Сборка библиотеки

Для сборки используется команда:

ng build my-lib

Результат помещается в каталог dist/my-lib. В процессе:

  • компилируется TypeScript;
  • генерируются декларации .d.ts;
  • создаётся оптимизированный JavaScript в формате ES2015+;
  • добавляются метаданные Angular Ivy.

Именно содержимое dist публикуется в npm, а не исходный код проекта.


Настройка package.json для npm

В каталоге dist/my-lib находится итоговый package.json. Ключевые поля:

  • name — уникальное имя пакета;
  • version — версия по semver;
  • peerDependencies — Angular-зависимости;
  • sideEffects — флаг для tree-shaking.

Пример:

{
  "name": "@scope/my-lib",
  "version": "1.0.0",
  "peerDependencies": {
    "@angular/core": "^16.0.0",
    "@angular/common": "^16.0.0"
  }
}

Использование peerDependencies предотвращает дублирование Angular в приложении-потребителе.


Версионирование и semver

Angular-библиотеки следуют семантическому версионированию:

  • MAJOR — несовместимые изменения API;
  • MINOR — новый функционал без поломок;
  • PATCH — исправления ошибок.

Изменение публичных сигнатур компонентов или сервисов требует увеличения MAJOR-версии. Добавление необязательных параметров допускается в MINOR.


Публикация пакета

Перед публикацией выполняется аутентификация:

npm login

Публикация выполняется из каталога dist/my-lib:

npm publish --access public

Для scoped-пакетов флаг --access public обязателен, иначе пакет будет приватным.


Обновление и поддержка библиотеки

После публикации обновления выполняются по тому же циклу:

  1. изменение исходного кода;
  2. увеличение версии;
  3. сборка;
  4. повторная публикация.

Angular CLI обеспечивает стабильную структуру сборки, что упрощает долгосрочную поддержку и совместимость с новыми версиями фреймворка.