Автор оригинала: 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, давайте увидим быстрый обзор, когда каждая из цифр в номерах версий должна быть увеличена, поскольку изменения выполнены в кодовую базу:
- Обратные несовместимые изменения увеличивают Майор портить
- Если сделано новое (обратное совместимое) изменение, то несовершеннолетний цифра увеличивается.
- Простые исправления ошибок (к существующей функциональности) увеличивают патч портить
Когда вы выполняете 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, может сэкономить вам много головных болей, а также некоторое время, удерживая вас, чтобы постоянно обновлять ваши версии зависимости.
У вас есть предпочтительный выбор? У вас был плохой опыт использования либо карета или тильды? Дайте нам знать об этом в комментариях!