Jaka jest składnia wersji bower (i npm)?
Bower pozwala mi określić wymagania wersji dla pakietów używając następującej składni:
"dependencies": {
"<name>": "<version>",
},
Ale nie udało mi się znaleźć składni <version>
. Wiem, że mogę określić wersje na:
- większa niż pewna wersja z
">1.0.0"
- większa lub równa wersji:
">=1.0.0"
- lub w jakimś zakresie:
"1.0.0 - 2.0.0"
.
Wiem też, że istnieje wspólna składnia wersji zawierająca tyldę: "~1.0.0"
. Ale jestem Nie wiem, co to znaczy i czy jest to samo co "=1.0.0"
.
Interesuje mnie również, czy jestem w stanie podać wiele nie-kolejnych wersji, np. dokładnie 1.0.3
Plus wersje większe niż 1.5.0
itp...
5 answers
W skrócie, składnia dla numerów wersji Bowera (i NPM) nazywa się SemVer, co jest skrótem od 'Semantic Versioning'. Można znaleźć dokumentację szczegółowej składni Semvera używanej w Bower i npm w API dla parsera semvera w Node / npm . Możesz dowiedzieć się więcej o podstawowej specyfikacji (która nie wspomina , a nie o ~
lub o innych szczegółach składni) na stronie semver.org .
Istnieje super-poręczny kalkulator semvera wizualnego Możesz baw się, co znacznie ułatwia granie i testowanie.
SemVer to nie tylko składnia! Ma kilka ciekawych rzeczy do powiedzenia na temat właściwych sposobów publikowania API, które pomogą zrozumieć, co oznacza składnia.
Więc twoje konkretne pytanie dotyczące tego majora.Drobne./ Align = "left" / (Podobnie jak powiązany operator karetkiPo zidentyfikowaniu publicznego API komunikujesz w nim zmiany z określonymi przyrostami do numeru wersji. rozważ format wersji X. Y. Z (dur.Drobne.Patch) . Poprawki błędów nie wpływające na przyrost API wersja patch, kompatybilne wstecz dodatki/zmiany API zwiększają wersję podrzędną, a niekompatybilne wstecz zmiany API zwiększają wersję główną.
^
.) Możesz użyć ~
, aby zawęzić zakres wersji, które chcesz zaakceptować do jednej z nich:
- kolejne Patch-level zmiany do tej samej wersji minor ( " poprawki błędów nie wpływa na API " ), lub:
- kolejne minor-level zmiany do tej samej głównej wersji ("wstecznie kompatybilne dodatki/zmiany API")
Na przykład: aby wskazać, że będziecie wprowadzać kolejne zmiany na poziomie patcha w wersji 1.2.x tree, począwszy od 1.2.0, ale mniej niż 1.3.0, można użyć:
"angular": "~1.2"
or:
"angular": "~1.2.0"
Daje to również takie same wyniki jak przy użyciu składni .x
:
"angular": "1.2.x"
Ale możesz użyć składni tyldy/~
, aby była parzysta bardziej szczegółowo: jeśli akceptujesz tylko zmiany na poziomie patcha począwszy od 1.2.4, ale nadal mniej niż 1.3.0, użyjesz:
"angular": "~1.2.4"
W Lewo, w kierunku major , jeśli używasz...
"angular": "~1"
... to to samo co...
"angular": "1.x"
or:
"angular": "^1.0.0"
...i pasuje do wszystkich drobnych zmian na poziomie niższym niż 1.0.0 i niższym niż 2.0: {]}
Zauważ, że ostatnia zmiana powyżej: nazywa się 'zakres karetki' . Karetka wygląda strasznie jak >
, więc będziesz usprawiedliwiony myśleniem, że oznacza to "dowolną wersję większą niż 1.0.0". (Na pewno poślizgnąłem się na tym. Nie!
Zakresy karetek są w zasadzie używane, aby powiedzieć, że dbasz tylko o lewą-najbardziej znaczącą cyfrę - zazwyczaj główną wersję - i że zezwolisz na wszelkie drobne - lub poprawki-zmiany poziomu, które nie wpływają na tę lewą-najbardziej znaczącą cyfrę. Jednak, w przeciwieństwie do zakresu tyldy, który określa główną wersję, zakresy caret pozwalają określić precyzyjny minor/patch punkt wyjścia. Tak więc, podczas gdy ^1.0.0 === ~1
, zakres karetki taki jak ^1.2.3
pozwala ci powiedzieć, że przyjmujesz wszelkie zmiany >=1.2.3 && <2.0.0
. Nie mogłeś tego zrobić z tyldą.
.x
: po prostu pozwalają robić więcej. Dlatego zobaczysz tyldę często używaną nawet tam, gdzie .x
służyłaby. Jako przykład, zobacz sam npm: jego własny pakiet.plik json zawiera wiele zależności w formacie ~2.4.0
, zamiast formatu 2.4.x
, którego mógłby użyć. Trzymając się ~
, składnia jest spójna aż do listy 70+ wersjonowane zależności, niezależnie od tego, który początkowy numer łaty jest akceptowalny.
W każdym razie, jest jeszcze więcej do Semvera, ale nie będę starał się szczegółowo to wszystko tutaj. Sprawdź to na readme pakietu node semver. I pamiętaj, aby użyć kalkulatora wersjonowania semantycznego podczas gdy ty ćwiczysz i próbujesz zrozumieć, jak działa SemVer.
[22] re: Nie-kolejne numery wersji: ostatnie pytanie OP wydaje się być o sprecyzowanie Nie-kolejne numery wersji/zakresy (jeśli edytowałem to uczciwie). Tak, możesz to zrobić, używając wspólnego operatora podwójnej rury "lub":
||
. Tak:
"angular": "1.2 <= 1.2.9 || >2.0.0"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-27 07:46:23
Na podstawie semver , możesz użyć
Myślnik X. Y. Z-A. B. C
1.2.3-2.3.4
Wskazuje >=1.2.3X-Zakresy
1.2.x 1.X 1.2.*
Zakresy Tyldy
~1.2.3 ~1.2
oznacza zezwolenie na zmiany na poziomie łatek lub drobne zmiany wersji.-
Karetki ^1.2.3 ^0.2.5 ^0.0.4
pozwala na zmiany, które nie modyfikują lewej-najbardziej niezerowej cyfry w [major, minor, patch] tuple
-
^1.2.x
(oznacza >=1. 2. 0 -
^0.0.x
(oznacza >=0, 0, 0 -
^0.0
(oznacza >=0, 0, 0
-
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-06 01:49:24
Bower używa składni semver, ale oto kilka szybkich przykładów:
Możesz zainstalować konkretną wersję:
$ bower install jquery#1.11.1
Możesz użyć~, aby określić 'dowolną wersję, która zaczyna się od tego':
$ bower install jquery#~1.11
Możesz określić wymagania wielu wersji razem:
$ bower install "jquery#<2.0 >1.10"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-09 19:53:43
Możesz również użyć słowa kluczowego latest
, Aby zainstalować najnowszą dostępną wersję:
"dependencies": {
"fontawesome": "latest"
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-26 19:04:15
Jeśli nie ma numeru łaty, ~
jest równoznaczne z dołączeniem .x
do wersji bez tyldy. Jeśli istnieje numer łaty, ~
zezwala na wszystkie numery łat > = podany.
~1 := 1.x
~1.2 := 1.2.x
~1.2.3 := (>=1.2.3 <1.3.0)
Nie mam wystarczająco punktów, aby skomentować zaakceptowaną odpowiedź, ale niektóre informacje o tyldzie są sprzeczne z powiązaną dokumentacją semvera: "angular": "~1.2"
willnot match 1.3, 1.4, 1.4.9. Również "angular": "~1"
i "angular": "~1.0"
są Nie równoważne. Można to zweryfikować za pomocą semvera npm Kalkulator .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 17:28:42