Если в пакетах Node.js есть одна замечательная вещь, так это то, что все они согласились использовать семантическое управление версиями для нумерации своих версий.
Концепция семантического управления версиями проста: все версии имеют 3 цифры: x.y.z
.
- первая цифра - основная версия
- вторая цифра - младшая версия
- третья цифра - версия патча
Когда вы делаете новый релиз, вы не просто увеличиваете число, как вам нравится, но у вас есть правила:
- вы обновляете основную версию, когда вносите несовместимые изменения API
- вы добавляете младшую версию, когда добавляете функциональность с обратной совместимостью
- вы обновляете версию патча, когда исправляете ошибки, совместимые с предыдущими версиями
Соглашение принято во всех языках программирования, и очень важно, чтобы каждый npm
пакет придерживался его, потому что от этого зависит вся система.
Почему это так важно?
Поскольку npm
устанавливает некоторые правила, которые мы можем использовать в файле package.json
, чтобы выбрать, до каких версий он может обновлять наши пакеты, когда мы запускаем npm update
.
В правилах используются следующие символы:
^
~
>
>=
<
<=
=
-
||
Давайте подробно рассмотрим эти правила:
^
: будут выполняться только обновления, которые не изменяют крайнее левое ненулевое число, т. е. могут быть изменения в дополнительной версии или версии исправления, но не в основной версии. Если написать^13.1.0
, при запускеnpm update
он может обновиться до13.2.0
,13.3.0
даже до13.3.1
,13.3.2
и так далее, но не до14.0.0
или выше.~
: если вы пишете~0.13.0
при запускеnpm update
, он может обновляться до выпусков исправлений:0.13.1
нормально, а0.14.0
нет.>
: вы принимаете любую версию выше указанной>=
: вы принимаете любую версию, равную или выше той, которую вы указали<=
: вы принимаете любую версию, равную или ниже той, которую вы указали<
: вы принимаете любую версию ниже указанной=
: ты принимаешь именно эту версию-
: вы принимаете ряд версий. Пример:2.1.0 - 2.6.2
||
: вы комбинируете наборы. Пример:< 2.1 || > 2.6
Вы можете комбинировать некоторые из этих обозначений, например, использовать 1.0.0 || >=1.1.0 <1.2.0
либо для использования 1.0.0, либо для одного выпуска от 1.1.0 и выше, но ниже 1.2.0.
Есть и другие правила:
- без символа: вы принимаете только указанную версию (
1.2.1
) latest
: вы хотите использовать последнюю доступную версию