Версионирование библиотек

Angular развивается как платформа с жёстко контролируемым циклом версий. Понимание системы версионирования критично для поддержки проектов, обновлений и совместимости сторонних библиотек.

Семантическое версионирование

Angular придерживается Semantic Versioning (SemVer):

MAJOR.MINOR.PATCH

Пример:

17.2.3
  • MAJOR — несовместимые изменения API
  • MINOR — новые возможности без нарушения совместимости
  • PATCH — исправления ошибок

Особенность MAJOR-обновлений Angular

Каждое мажорное обновление Angular:

  • может удалять устаревший API
  • может требовать обновления TypeScript
  • часто сопровождается изменениями в CLI и сборке

При этом команда Angular придерживается строгого правила: breaking changes документируются и автоматизируются.

Angular CLI и синхронизация версий

Все ключевые пакеты Angular имеют одинаковый MAJOR и MINOR:

  • @angular/core
  • @angular/common
  • @angular/router
  • @angular/forms

Пример корректного набора:

@angular/core@17.2.0
@angular/router@17.2.0
@angular/cli@17.2.1

PATCH-версии могут отличаться, но MAJOR и MINOR должны совпадать.

Диапазоны версий в package.json

Angular-проекты по умолчанию используют каретку (^):

"@angular/core": "^17.2.0"

Это означает:

  • разрешены обновления PATCH и MINOR
  • MAJOR обновления запрещены

Такой подход обеспечивает баланс между стабильностью и получением новых возможностей.

peerDependencies и сторонние библиотеки

Angular-библиотеки почти всегда используют peerDependencies:

"peerDependencies": {
  "@angular/core": ">=16.0.0 <18.0.0"
}

Это означает:

  • библиотека не устанавливает Angular самостоятельно
  • ответственность за версию лежит на приложении
  • npm/yarn проверяют совместимость при установке

Нарушение диапазона приводит к предупреждениям или ошибкам сборки.

Deprecated API и стратегия удаления

Angular использует многоэтапную стратегию:

  1. API помечается как @deprecated
  2. предупреждение сохраняется минимум один MAJOR-релиз
  3. удаление происходит в следующем MAJOR

Это даёт время библиотекам и приложениям адаптироваться без экстренных правок.

ng update и управление версиями

CLI предоставляет механизм контролируемого обновления:

ng update @angular/core @angular/cli

Он выполняет:

  • анализ текущих версий
  • запуск миграционных схем
  • автоматическое обновление кода

Каждый пакет Angular может содержать собственные schematics-миграции, привязанные к версии.

Версионирование библиотек Angular-экосистемы

Популярные библиотеки (RxJS, Angular Material, NgRx):

  • синхронизируют MAJOR-версии с Angular
  • либо чётко указывают поддерживаемые диапазоны

Пример RxJS:

  • Angular 16+ → RxJS 7.8+
  • Angular 17+ → RxJS 7.8 / 8 (в зависимости от конфигурации)

Несоблюдение этих связей часто приводит к ошибкам типов или runtime-исключениям.

Long Term Support и частота релизов

Angular выпускает:

  • MAJOR — примерно раз в 6 месяцев
  • MINOR — по мере готовности
  • PATCH — регулярно

Каждый MAJOR-релиз имеет период активной поддержки и ограниченный LTS, что важно учитывать при долгоживущих корпоративных проектах.

Итоговая роль версионирования

Версионирование в Angular — не формальность, а основа:

  • предсказуемых обновлений
  • совместимости библиотек
  • автоматизированных миграций
  • стабильности экосистемы

Понимание этой системы позволяет управлять зависимостями осознанно, избегая хаотичных обновлений и скрытых breaking changes.