Рубрики
Без рубрики

Caret vs Tilde в Package.json

Автор оригинала: Scott Robinson.

Package.json File – это сердце всех пакетов NPM и независимо от того, что вы могли бы иметь в вашем проекте, одно наверняка: всегда будет файл package.json. Из многих вещей, содержащихся в package.json file Управление зависимостью – это то, о чем мы будем говорить сегодня.

Я думаю, что большинство разработчиков согласится с тем, что управление зависимостями никогда не было легкой задачей в первые дни языков высокого уровня, такими как JavaScript. Просто спросите Java Developer, какую жизнь было как жизнь, прежде чем Мавена пришла; Или, может быть, поговорите с рубиновым разработчиком о том, как большая часть воздействия Rubygems на их развитие. То же самое касается Node.js разработчиков. Без зависимости управления NPM и Public.json, жизнь не будет почти так же легкой.

Опекуны и тилды в номерах версий

В рамках каждого проекта, поддерживающего NPM, зависимости отслеживаются и управляются внутри файла Package.json через свойство «Зависимости» JSON. Обычно эти зависимости довольно прямые и легко понять. Хотя иногда вы можете заметить изменения в номера версий после использования --save Опция в Package.json. Посмотрите к этому дальше, вы можете увидеть, что номера версий теперь имеют незнакомый персонаж перед ними.

В частности, вы можете в конечном итоге с чем-то вроде:

"dependencies": {
  "express": "^3.9.2"
}

Или другая возможность:

"dependencies": {
  "express": "~3.9.2"
}

Так что это «^» (или «~») характер на самом деле делает там? Не волнуйтесь, это довольно просто, и я попытаюсь объяснить.

Символы, которые приходят до того, как номера версий являются префиксами, которые мы называем знаками Caret (^) и Tilde (~). Они добавлены разработчиками (или NPM) на Укажите ограничения, на которых номера версий программного обеспечения могут использоваться в качестве зависимости в вашем проекте Отказ Эти номера схем следуют на конвенции, известной как семантическая версия или семя. Фактические номера сами используются в системе варианта управления версиями, чтобы указать, что тип изменений, которые привели к увеличению номера версии. Числа (3, 9 и 2) в приведенном выше примере называются основными, незначительными и патч-числами слева направо.

Прежде чем мы воспользуемся деталями того, что на самом деле значит CARET и Tilde, давайте увидим быстрый обзор, когда каждая из цифр в номерах версий должна быть увеличена, поскольку изменения выполнены в кодовую базу:

  1. Обратные несовместимые изменения увеличивают Майор портить
  2. Если сделано новое (обратное совместимое) изменение, то несовершеннолетний цифра увеличивается.
  3. Простые исправления ошибок (к существующей функциональности) увеличивают патч портить

Когда вы выполняете NPM установить В каталоге чистого проекта самый высокий Доступная версия программного обеспечения для зависимости, которая может удовлетворить номер версии, приведенный в Package.json, установлен для каждой зависимости. Так что, если используется ^ или ~, то используется точный номер номера версии.

Однако, не указав точную версию зависимости в файле Package.json и используя знаки CARET (^) или Tilde (~), NPM позволяет расширить диапазон версий. Когда --save Флаг используется, функциональность по умолчанию является префикс версии с помощью знака CARET. И, конечно, это можно настроить с Параметр Save-Prefix Отказ

Что касается семантической версии, вот разбивка какой кодовой базы изменяет знак Caret, позволит:

CARET позволяет …

  • Обратная совместимая новые функциональные возможности
  • Большой внутренний рефактор
  • Исправление ошибок
  • Обесценение старой функциональности (которая все еще работает)

С каретом вы можете получить релизы, как 3. Отказ , где персонажи * будут соответствовать самый высокий номер версии Доступно. Таким образом, изменения в основной цифр, вроде 4.0.0, не будут использоваться в этом случае.

Тильда позволяет …

  • Исправление ошибок

С тильдой вы можете получить релизы, такие как 3.9. *. Только последние исправления ошибок разрешены с помощью Tilde.

Таким образом, мы можем заключить, говоря, что персонаж должен использоваться, если вы хотите Блокировка в номер патча. Вы должны использовать это, когда вы готовы принять только исправления ошибок и не хотите противостоять любым возможном несовместимым изменениям. С другой стороны, символ ^ несет ответственность за блокировку в патч и Незначительные номера версий. Он должен использоваться, когда вы хотите иметь обратную совместимую новую функциональность, а также исправления ошибок.

Заключение

Имейте в виду, что очень старые версии NPM не поддерживают ^ Так что используйте его с осторожностью. Хотя любая из версий NPM, выпущенных в прошлом году, или так, должно быть в порядке. В большинстве случаев это не должно повлиять на вас.

Здесь действительно не «лучший выбор», поскольку оба имеют их использование в разных сценариях. Все зависит от ваших требований проекта и личных предпочтений. Просто осознавая эту функцию в Semver и NPM, может сэкономить вам много головных болей, а также некоторое время, удерживая вас, чтобы постоянно обновлять ваши версии зависимости.

У вас есть предпочтительный выбор? У вас был плохой опыт использования либо карета или тильды? Дайте нам знать об этом в комментариях!