Карет против Тильды в package.json

Файл package.json - это сердце всех пакетов npm, и независимо от того, что у вас есть в вашем проекте, одно можно сказать наверняка: всегда будет файл package.json. Из множества вещей, содержащихся в файле package.json [https://docs.npmjs.com/files/package.json], сегодня мы поговорим об управлении зависимостями. Я думаю, что большинство разработчиков согласятся, что управление зависимостями никогда не было легкой задачей на заре появления языков высокого уровня, таких как JavaScript. Как только

Файл package.json - это сердце всех пакетов npm, и независимо от того, что у вас есть в вашем проекте, одно можно сказать наверняка: всегда будет файл package.json. Из множества вещей, содержащихся в файле package.json , сегодня мы поговорим об управлении зависимостями.

Я думаю, что большинство разработчиков согласятся, что управление зависимостями никогда не было легкой задачей на заре появления языков высокого уровня, таких как JavaScript. Просто спросите разработчика Java, какой была жизнь до появления Maven; или, может быть, поговорите с Ruby-разработчиком о том, какое влияние RubyGems оказывает на их разработку. То же самое и с разработчиками Node.js. Без управления зависимостями npm и package.json жизнь была бы не такой простой.

Каретки и тильды в номерах версий

В каждом проекте, поддерживаемом npm, зависимости отслеживаются и управляются внутри файла package.json через свойство JSON dependencies. Обычно эти зависимости довольно просты и понятны. Хотя иногда вы можете заметить изменения номеров версий после использования параметра --save в package.json. Заглянув в него дальше, вы можете увидеть, что теперь перед номерами версий стоит незнакомый символ.

В частности, вы можете получить что-то вроде:

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

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

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

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

Символы, стоящие перед номерами версий, являются префиксами, которые мы называем знаками вставки (^) и тильды (~). Они добавляются разработчиками (или npm), чтобы указать ограничения на то, какие номера версий программного обеспечения могут использоваться в качестве зависимости в вашем проекте . Эти числовые схемы следуют соглашению, известному как семантическое управление версиями или semver. Сами фактические числа используются в системе управления версиями, чтобы указать тип внесенных изменений, которые привели к увеличению номера версии. Цифры (3, 9 и 2) в приведенном выше примере называются основным, второстепенным и номером патча слева направо.

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

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

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

Однако, не указывая точную версию зависимости в файле package.json и используя знаки каретки (^) или тильда (~), npm позволяет расширить допустимый диапазон версий. Когда --save флаг --save, по умолчанию перед версией ставится знак вставки. И, конечно же, это можно настроить с помощью параметра save-prefix .

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

Карет позволяет ...

  • Новые функции с обратной совместимостью
  • Большой внутренний рефакторинг
  • Исправление ошибок
  • Прекращение поддержки старых функций (которые все еще работают)

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

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

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

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

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

Заключение

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

На самом деле здесь нет "лучшего выбора", поскольку оба они используются в разных сценариях. Все зависит от требований вашего проекта и личных предпочтений. Простое знание этой функции в semver и npm может сэкономить вам много головной боли, а также сэкономить время, избавив вас от необходимости постоянно обновлять версии зависимостей вручную.

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

comments powered by Disqus