Как работает семантическое версионирование и что значат ^ и ~ в 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.xcaret осторожнее:^0.3.1разрешает только0.3.x, потому что до 1.0 любое изменение может ломать API. - Пре-релизы (
1.0.0-beta.1) диапазоны по умолчанию не подтягивают. - Поломки всё равно случаются, если автор нарушил SemVer, поэтому нужны lock-файл и автотесты.
Коротко для собеседования
Caret разрешает minor и patch, tilde только patch. Версию ломает не диапазон, а нарушение SemVer автором, поэтому зависимости фиксируют lock-файлом и обновляют осознанно.