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...

Author: XML, 2013-09-26

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.

Po 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ą.

Więc twoje konkretne pytanie dotyczące tego majora.Drobne./ Align = "left" / (Podobnie jak powiązany operator karetki ^.) 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ą.

To wszystko wydaje się na początku mylące, kiedy patrzysz na to z bliska. Ale pomniejsz na chwilę i pomyśl o tym w ten sposób: karetka pozwala ci po prostu powiedzieć, że najbardziej martwi cię to, co pozostało znaczącej cyfry-najbardziej. Tylda pozwala ci powiedzieć, że najbardziej martwisz się o to, która cyfra jest właściwa-najbardziej. reszta to detale. To właśnie moc ekspresyjna tyldy i karetki wyjaśnia, dlaczego ludzie używają ich znacznie więcej niż prostsza składnia .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"
 326
Author: XML,
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.3

  • X-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
 135
Author: Jerome Anthony,
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"
 75
Author: Wilfred Hughes,
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"
  }
 13
Author: shacker,
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"Nie równoważne. Można to zweryfikować za pomocą semvera npm Kalkulator .

 7
Author: Decima,
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