Что такое синтаксис версии bower (и npm)?
беседка позволяет мне указать требования к версии для пакетов, используя следующий синтаксис:
"dependencies": {
"<name>": "<version>",
},
но я не смог найти то, что синтаксис для <version>
. Я знаю, что я могу указать варианты:
- больше, чем определенная версия с
">1.0.0"
- больше или равно версии:
">=1.0.0"
- или в некотором диапазоне:
"1.0.0 - 2.0.0"
.
Я также знаю, что есть общая синтаксис версии, содержащий Тильду:"~1.0.0"
. Но я не уверен, что это значит и является ли это то же самое, что "=1.0.0"
.
мне также интересно узнать, могу ли я указать несколько не последовательных версий, таких как точно 1.0.3
плюс версии больше, чем 1.5.0
и т. д...
5 ответов:
в двух словах синтаксис для номеров версий Bower (и NPM) называется SemVer, что является сокращением от "семантического управления версиями". Вы можете найти документацию для подробного синтаксиса SemVer, используемого в Bower и NPM на API для парсер semver в узле / npm. Вы можете узнать больше о базовой спецификации (которая делает не отметить
~
или другие детали синтаксиса) в semver.org.здесь супер-удобный визуальный калькулятор semver вы можете играть с, что делает все это гораздо проще Грок и тест.
SemVer-это не просто синтаксис! Он имеет некоторые довольно интересные вещи, чтобы сказать о правильных способах публикации API, которые помогут понять, что означает синтаксис. Принципиально:
как только вы идентифицируете свой публичный API, вы сообщаете ему изменения с определенными приращениями к вашему номеру версии. рассмотрим формат версии X. Y. Z (Основной.Незначительный.Патч). Исправления ошибок, не влияющие на API, увеличивают версию патча, обратно совместимые дополнения/изменения API увеличивают второстепенную версию, а обратно несовместимые изменения API увеличивают основную версию.
Итак, ваш конкретный вопрос о
~
относится к крупным.Незначительный.Схема исправления. (Как и соответствующий оператор каретки^
.) Вы можете использовать~
сузить круг версий, которые вы готовы принять либо:
- в последующем патч-уровень изменения в той же минорной версии ( "исправлены ошибки, не влияющие на API"), или:
- в последующем мелкие-уровень изменения в основной версии ( "обратная совместимость API дополнения / изменения")
например: чтобы указать, что вы будете принимать любые последующие изменения уровня патча на 1.2.X дерево, начиная с 1.2.0, но менее 1.3.0, вы можно использовать:
"angular": "~1.2" or: "angular": "~1.2.0"
это также дает вам те же результаты, что и при использовании
.x
синтаксис:"angular": "1.2.x"
но, вы можете использовать Тильду/
~
синтаксис, чтобы быть еще более конкретным: если вы только готовы принять изменения на уровне патча начиная с 1.2.4, но все же меньше, чем 1.3.0, можно использовать:"angular": "~1.2.4"
двигаясь влево, в сторону майор версию, если вы используете...
"angular": "~1"
... то же самое как...
"angular": "1.x" or: "angular": "^1.0.0"
...и соответствует любым незначительным изменениям уровня патча выше 1.0.0 и менее 2.0:
обратите внимание, что последний вариант выше: это называется 'диапазон каре'. Каретка очень похожа на
>
, так что вы будете извинены за то, что думаете, что это означает " любая версия больше 1.0.0". (Я, конечно, поскользнулся на этом.) Нет!диапазоны каретки в основном используются, чтобы сказать, что вы заботитесь только о самая левая значащая цифра-обычно основная версия - и что вы разрешите любые незначительные изменения или изменения на уровне патча, которые не влияют на эту самую левую цифру. Тем не менее, в отличие от диапазона Тильды, который определяет основную версию, диапазоны каретки позволяют указать точную начальную точку minor/patch. Так, в то время как
^1.0.0 === ~1
, диапазон каретки, например^1.2.3
позволяет сказать, что вы будете принимать любые изменения>=1.2.3 && <2.0.0
. Вы не могли бы сделать это с диапазоном Тильды.это все кажется запутанным на первый взгляд, когда вы смотрите на это-близко. Но уменьшите масштаб на секунду, и подумайте об этом так: каретка просто позволяет вам сказать, что вы больше всего обеспокоены тем, что значащая цифра остается самой большой. Тильда позволяет вам сказать, что вы больше всего беспокоитесь о том, какая цифра самая правильная. остальное-мелочи.
это выразительная сила Тильды и каре, что объясняет, почему люди используют их гораздо больше, чем просто
.x
синтаксис: они просто позволяют делать больше. Вот почему вы увидите, что Тильда часто используется даже там, где.x
будет служить. В качестве примера см. Сам НПМ: его собственный пакет.JSON файл включает в себя множество зависимостей в , а не это может использовать. Придерживаясь~
, синтаксис согласован полностью вниз по списку 70 + версионных зависимостей, независимо от того, какой начальный номер патча является приемлемым.в любом случае, есть еще что-то для SemVer, но я не буду пытаться подробно все это здесь. Проверьте это на узел semver пакета readme. И обязательно используйте семантический калькулятор версий в то время как вы практикуете и пытаетесь понять, как работает SemVer.
RE: номера не последовательных версий: последний вопрос OP, похоже, касается указания не последовательных номеров версий/диапазонов (если я его отредактировал справедливо). Да, вы можете сделать это, используя общий оператор двойной трубы "или":
||
. Вот так:"angular": "1.2 <= 1.2.9 || >2.0.0"
на основе semver, вы можете использовать
Дефис Диапазоны Х. Ю. З. - Б. А. С.
1.2.3-2.3.4
Указывает >=1.2.3X-Диапазоны
1.2.x 1.X 1.2.*
Тильда Диапазоны
~1.2.3 ~1.2
указывает на разрешение изменений уровня исправлений или незначительных изменений версии.Диапазоны Каретки ^1.2.3 ^0.2.5 ^0.0.4
позволяет вносить изменения, которые не изменяют самую левую ненулевую цифру в кортеже [major, minor, patch]
^1.2.x
(средства >=1.2.0^0.0.x
(средства >=0.0.0^0.0
(средства >=0.0.0
Бауэр использует синтаксис semver, но вот несколько простых примеров:
вы можете установить определенную версию:
$ bower install jquery#1.11.1
вы можете использовать ~, чтобы указать любую версию, которая начинается с этого:
$ bower install jquery#~1.11
вы можете указать несколько требований к версии вместе:
$ bower install "jquery#<2.0 >1.10"
вы также можете использовать
latest
ключевое слово для установки последней доступной версии:"dependencies": { "fontawesome": "latest" }
если нет номера патча,
~
эквивалентно добавлению.x
к версии без Тильды. Если есть номер патча,~
разрешает все номера патч >= заданной.~1 := 1.x ~1.2 := 1.2.x ~1.2.3 := (>=1.2.3 <1.3.0)
у меня недостаточно очков, чтобы прокомментировать принятый ответ, но некоторые сведения о Тильде расходятся с связанной документацией semver:
"angular": "~1.2"
будет не матч 1.3, 1.4, 1.4.9. Также"angular": "~1"
и"angular": "~1.0"
are не эквивалентны. Этот можно проверить с помощью npm semver calculator.