Если в пакетах 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: вы хотите использовать последнюю доступную версию