В чем разница между Тильдой(~) и каре(^) в упаковке.в JSON?



после того, как я обновился до последней стабильной node и npm, Я пробовал npm install moment --save. Это сохраняет запись в package.json С caret(^) префикс. Раньше это было tilde(~) префикс.




  1. почему эти изменения в npm?

  2. в чем разница между tilde(~) и caret(^)?

  3. в чем преимущества перед другими?

695   14  

14 ответов:

в самых простых терминах Тильда соответствует самой последней минорной версии (среднее число). ~1.2.3 будет соответствовать всем 1.2.х версии, но будет Мисс 1.3.0.

каретка, с другой стороны, более расслаблена. Он будет обновлять вас самая последняя основная версия (первый номер). ^1.2.3 будет соответствовать любой 1.X. X релиз в том числе 1.3.0, но будет держаться на 2.0.0.

http://fredkschott.com/post/2014/02/npm-no-longer-defaults-to-tildes/

патч версия в указанной версии". Аналогично для^, "самая последняя основная версия "должна читаться как" самая последняя несовершеннолетний версия в указанной основной версии".

Я хотел бы добавить официальную документацию npmjs, которая описывает все методы для специфики версии, включая те, которые упоминаются в вопросе -

https://docs.npmjs.com/files/package.json

https://docs.npmjs.com/misc/semver#x-ranges-12x-1x-12-

  • ~version "приблизительно эквивалентно версии" см. npm semver - Тильда диапазоны & semver (7)
  • ^version "совместимость с версией" см. npm semver - Caret диапазоны & semver (7)
  • version должна точно соответствовать версии
  • >version должно быть больше, чем версия
  • >=version etc
  • <version
  • <=version
  • 1.2.x 1.2.0, 1.2.1 и т. д. но не 1.3.0
  • http://sometarballurl (это может быть URL-адрес архива, который будет загружен и устанавливается локально
  • * соответствует любой версии
  • latest получение последней версии

приведенный выше список не является исчерпывающим. Другие спецификаторы версии включают URL-адреса GitHub и репозитории пользователей GitHub, локальные пути и пакеты с конкретными тегами npm

Npm позволяет установить более новую версию пакета, чем указано. Использование Тильды (~) дает вам исправления ошибок релизы и каретки (^) дает вам обратно совместимые новые функции, а также.

проблема в том, что старые версии обычно не получают исправлений ошибок, поэтому npm использует caret (^) по умолчанию для --save.

semver table

по: "Semver объяснил - почему каре (^) в моем пакет.в JSON?".

Примечание что правила применяются к версиям выше 1.0.0 и не каждый проект следует семантическому версионированию. Для версий 0.x. X каретка позволяет только патч обновлений, т. е. он ведет себя так же, как Тильда. Смотрите "Каре Колеблется"

вот визуальное объяснение понятий:

semver diagram

источник: " Семантическое Управление Версиями Шпаргалка".

~ исправлены крупные и мелкие цифры. Он используется, когда вы готовы принять исправления ошибок в своей зависимости, но не хотите никаких потенциально несовместимых изменений.

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

кроме того, ^ и не поддерживается по старым версиям npm, и должны использоваться с осторожность.

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

Semver

<major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2
  • использовать npm semver calculator для тестирования. (Хотя объяснения для ^ (включают все больше, чем определенная версия в том же основном диапазоне) и ~ (включают все больше, чем определенная версия в том же незначительном диапазоне) не являются 100% правильными, калькулятор, кажется, работает нормально)
  • в качестве альтернативы, используйте SemVer Check вместо этого, который не требует, чтобы вы выбрали пакет, а также предлагает объяснения.

разрешить или запретить изменения

  • версия Pin:1.2.3.
  • использовать ^ (как руководитель). Позволяет обновления на втором ненулевом уровне слева:^0.2.3 означает 0.2.3 <= v < 0.3.
  • использовать ~ (как хвост). Как правило, заморозить самый правый уровень или установить ноль, если он опущен:
    • ~1 означает 1.0.0 <= v < 2.0.0
    • ~1.2 означает 1.2.0 <= v < 1.3.0.
    • ~1.2.4 означает 1.2.4 <= v < 1.3.0.
  • Ommit самый правый уровень:0.2 означает 0.2 <= v < 1. Отличается от ~ потому что:
    • запуск опущенной версии уровня всегда 0
    • вы можете установить начальную основную версию без указания подуровней.

все (надеюсь) возможности

установить запуск основного уровня и разрешить обновления вверх

*  or "" (empty string)   any version
1                         v >= 1

заморозить майор-уровень

~0 (0)            0.0 <= v < 1
0.2               0.2 <= v < 1          // Can't do that with ^ or ~ 
~1 (1, ^1)        1 <= v < 2
^1.2              1.2 <= v < 2
^1.2.3            1.2.3 <= v < 2
^1.2.3-beta.4     1.2.3-beta.4 <= v < 2

заморозить младший уровень

^0.0 (0.0)        0 <= v < 0.1
~0.2              0.2 <= v < 0.3
~1.2              1.2 <= v < 1.3
~0.2.3 (^0.2.3)   0.2.3 <= v < 0.3
~1.2.3            1.2.3 <= v < 1.3

патч-уровень заморозки

~1.2.3-beta.4     1.2.3-beta.4 <= v < 1.2.4 (only beta or pr allowed)
^0.0.3-beta       0.0.3-beta.0 <= v < 0.0.4 or 0.0.3-pr.0 <= v < 0.0.4 (only beta or pr allowed)
^0.0.3-beta.4     0.0.3-beta.4 <= v < 0.0.4 or 0.0.3-pr.4 <= v < 0.0.4 (only beta or pr allowed)

запретить обновления

1.2.3             1.2.3
^0.0.3 (0.0.3)    0.0.3

обратите внимание: отсутствует мажор, минор, патч или указание beta без числа, это то же самое, что any для недостающего уровня.

обратите внимание: при установке пакета, который имеет 0 как основной уровень, обновление будет устанавливать только новую версию уровня бета / pr! Это потому что npm наборы ^ по умолчанию в package.json и когда установлена версия, как 0.1.3, он замораживает все основные/второстепенные/патч-уровни.

~ : разумно закрыть до

   ~1.1.5: 1.1.0 <= accepted < 1.2.0

^:совместимость С

   ^1.1.5: 1.1.5 <= accepted < 2.0.0

   ^0.1.3: 0.1.3 <= accepted < 0.2.0

   ^0.0.4: 0.0.4 <= accepted < 0.1.0

^ Это 1.[любой.][любой] (последняя минорная версия)
~ - это 1.2.[любой] (последний патч)

Большое чтение этот блог о том, как semver применяется к npm
и что они делают, чтобы он соответствовал стандарт semver
http://blog.npmjs.org/post/98131109725/npm-2-0-0

Hat matching можно считать "сломанным", потому что он не будет обновляться ^0.1.2 to 0.2.0. Когда программное обеспечение появляется использовать 0.x.y версии и соответствие шляпы будут соответствовать только последней переменной цифре (y). Это делается специально. Причина в том, что в то время как программное обеспечение развивается, API быстро меняется: в один день у вас есть эти методы, а на другой день у вас есть эти методы, и старые исчезли. Если вы не хотите нарушать код для людей, которые уже используют вашу библиотеку вы идете и увеличиваете основную версию: например 1.0.0 ->2.0.0 ->3.0.0. Таким образом, к тому времени, когда ваше программное обеспечение, наконец, 100% сделано и полнофункциональный это будет как версия 11.0.0 и это не выглядит очень значимым, и на самом деле выглядит запутанным. Если бы Вы были, с другой стороны, используя 0.1.x ->0.2.x ->0.3.x версии, то к тому времени программное обеспечение, наконец, 100% сделано и полнофункциональный он выпущен как версия 1.0.0 и это означает ,что " этот релиз является долгосрочным сервисом, вы можете продолжайте и используйте эту версию библиотеки в своем производственном коде, и автор не изменит все завтра или в следующем месяце, и он не откажется от пакета".

правила: используйте 0.x.y управление версиями, когда ваше программное обеспечение еще не созрело, и выпускайте его с увеличением средней цифры при изменении вашего публичного API (поэтому люди, имеющие ^0.1.0 не будет 0.2.0 обновление, и это не сломает их код). Затем, когда программное обеспечение созреет, отпустите его под 1.0.0 и увеличивайте самую левую цифру каждый раз, когда ваш публичный API изменяется (поэтому люди, имеющие ^1.0.0 не будет 2.0.0 обновление, и это не сломает их код).

Given a version number MAJOR.MINOR.PATCH, increment the:

MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards-compatible manner, and
PATCH version when you make backwards-compatible bug fixes.

один лайнер объяснение

стандартная система управления версиями является основной.незначительный.построить (например, 2.4.1)

npm проверяет и исправляет версию конкретного пакета на основе этих символов

~: исправлена основная версия, исправлена второстепенная версия, соответствует любому номеру сборки

например : ~2.4.1 означает, что он будет проверять 2.4.x, где x-что угодно

^: основная версия исправлена, соответствует любой второстепенной версии, соответствует любому номеру сборки

например : ^2.4.1 означает, что он будет проверять 2.x. x, где x-что угодно

~ Тильда:

  • ~ исправления основные и второстепенные числа.
  • он используется, когда вы готовы принять исправления ошибок в вашей зависимости, но не хочу никаких потенциально несовместимых изменений.
  • Тильда соответствует последние версии (средний ряд).
  • ~1.2.3 будет соответствовать всем 1.2.x версии, но он пропустит 1.3.0.
  • Тильда ( ~ ) дает вам исправление ошибок релизы

^ каре:

  • ^ исправлено только основное число.
  • он используется, когда вы внимательно следите за своими зависимостями и готовы быстро изменить свой код, если незначительный выпуск будет несовместим.
  • он обновит вас до самая последняя основная версия (первое число).
  • ^1.2.3 будет соответствовать 1.X. X релиз в том числе 1.3.0, но он будет держаться на 2.0.0.
  • каретка ( ^ ) дает вам обратно совместимые новые функции, а также.

Тильда (~)

основная версия исправлена, дополнительная версия исправлена, соответствует любой сборке номер

"express": "~4.13.3" 

~4.13.3 означает, что он будет проверять 4.13.x где x-что угодно и 4.14.0

каре (^)

основная версия исправлена, соответствует любой второстепенной версии, соответствует любой сборке номер

"supertest": "^3.0.0"

^3.0.0 означает, что он будет проверять 3.х.X, где X все что угодно

вы, вероятно, видели тильду ( ~ ) и каре ( ^ ) в пакете.формат JSON. В чем разница между ними?

когда вы делаете npm install moment -- save, он сохраняет запись в пакете.json с префиксом каретки ( ^ ).

Тильда (~)

в самых простых терминах Тильда ( ~ ) соответствует самой последней минорной версии (среднее число). ~1.2.3 будет соответствовать всем 1.2.x версии, но пропустит 1.3.0.

каре (^)

в каре (^), с другой стороны, более расслабленным. Он обновит вас до самой последней основной версии (первый номер). ^1.2.3 будет соответствовать 1.X. X релиз в том числе 1.3.0, но будет держаться на 2.0.0.

Ссылка:https://medium.com/@Hardy2151/caret-and-tilde-in-package-json-57f1cbbe347b

номер версии находится в синтаксисе, который обозначает каждый раздел с различным значением. синтаксис разбит на три части, разделенные точкой.

майора.незначительный.заплатка 1.0.2

Major, minor и patch представляют собой различные версии пакета.

npm использует тильду ( ~ ) и каретку ( ^ ), чтобы указать, какие патч и дополнительные версии использовать соответственно.

Так что если вы видите ~1.0.2 это означает, чтобы установить версию 1.0.2 или последний патч версии 1.0.4. Если вы видите ^1.0.2, это означает установить версию 1.0.2 или последнюю версию minor или patch, такую как 1.1.0.

~ спецификации к выпускам второстепенных версий ^ указывает на основные версии

например, если версия пакета 4.5.2, при обновлении ~4.5.2 установит последнюю версию 4.5.x версия (младшая версия) ^4.5.2 установит последнюю версию 4.х.X версии (основная версия)

Comments

    Ничего не найдено.