PassFront
  1. PassFront
  2. База знаний
  3. Модули и пакеты

Как работает семантическое версионирование и что значат ^ и ~ в package.json?

Модули и пакеты

SemVer записывает версию как MAJOR.MINOR.PATCH: major ломает совместимость, minor добавляет функции без поломок, patch исправляет ошибки.

Диапазоны

  • ^1.4.2 — любая версия от 1.4.2 до <2.0.0 (обновления minor и patch).
  • ~1.4.2 — от 1.4.2 до <1.5.0 (только patch).
  • 1.4.2 — ровно эта версия.
  • * или latest — что угодно, для production не подходит.

Особенности

  • Для 0.x caret осторожнее: ^0.3.1 разрешает только 0.3.x, потому что до 1.0 любое изменение может ломать API.
  • Пре-релизы (1.0.0-beta.1) диапазоны по умолчанию не подтягивают.
  • Поломки всё равно случаются, если автор нарушил SemVer, поэтому нужны lock-файл и автотесты.

Коротко для собеседования

Caret разрешает minor и patch, tilde только patch. Версию ломает не диапазон, а нарушение SemVer автором, поэтому зависимости фиксируют lock-файлом и обновляют осознанно.

Другие вопросы раздела