npm: Dlaczego wersja „0.1” jest nieprawidłowa?

92

Musiałem zmienić wersję mojej aplikacji npm z 0.1 na 0.0.1, żeby npm tego nie robił.

$ npm install
npm ERR! install Couldn't read dependencies
npm ERR! Error: invalid version: 0.1
npm ERR!     at validVersion (/usr/local/Cellar/node/0.10.5/lib/node_modules/npm/node_modul
es/read-package-json/read-json.js:571:40)
npm ERR!     at final (/usr/local/Cellar/node/0.10.5/lib/node_modules/npm/node_modules/read
-package-json/read-json.js:323:23)
npm ERR!     at /usr/local/Cellar/node/0.10.5/lib/node_modules/npm/node_modules/read-packag
e-json/read-json.js:139:33
npm ERR!     at cb (/usr/local/Cellar/node/0.10.5/lib/node_modules/npm/node_modules/slide/l
ib/async-map.js:48:11)
npm ERR!     at /usr/local/Cellar/node/0.10.5/lib/node_modules/npm/node_modules/read-packag
e-json/read-json.js:301:48
npm ERR!     at fs.js:207:20
npm ERR!     at Object.oncomplete (fs.js:107:15)
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <[email protected]>

npm ERR! System Darwin 12.3.0
npm ERR! command "/usr/local/Cellar/node/0.10.5/bin/node" "/usr/local/bin/npm" "install"
npm ERR! cwd /Users/lust/Documents/ply/dev-server
npm ERR! node -v v0.10.5
npm ERR! npm -v 1.2.18
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/lust/Documents/ply/dev-server/npm-debug.log
npm ERR! not ok code 0

Dla kompletności oto działający plik json

$ cat package.json
{
    "name": "ply",
    "description": "ply server for local dev testing deployments",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
        "express": "3.x"
    }
} 

Kiedyś popełniała błąd, wersja była „0.1”.

Czy jest to jakaś koncepcja wersjonowania zgodności API / ABI wymagająca 3 zestawów numerów wersji? Dlaczego komunikat o błędzie nie jest bardziej przyjazny?

Steven Lu
źródło
1
spójrz na npm versionpolecenie. Pozwala na zwiększenie wersji semantycznej w oparciu o poziomy główne, poboczne lub poprawki. Przykłady: npm version major, npm version minor,npm version patch
Noe

Odpowiedzi:

110

Tak, jest to wymagane w przypadku wersjonowania semantycznego , które jest schematem obsługi wersji używanym przez pakiety npm. Oto fragment znpm help json :

Wersja musi być możliwa do przeanalizowania przez node-semver , który jest powiązany z npm jako zależnością. ( npm install semveraby użyć go sam).

Oto, w jaki sposób implementacja semver npm różni się od tego, co jest na semver.org:

  • Wersje mogą zaczynać się od „v”
  • Element numeryczny oddzielony od głównej wersji z trzema numerami myślnikiem zostanie zinterpretowany jako numer „kompilacji” i zwiększy wersję. Ale jeśli tag nie jest liczbą oddzieloną myślnikiem, jest traktowany jako tag przed wydaniem i jest mniejszy niż wersja bez tagu. Więc,0.1.2-7 > 0.1.2-7-beta > 0.1.2-6 > 0.1.2 > 0.1.2beta
Michelle Tilley
źródło
37
fajne. Błąd powinien po prostu powiedzieć coś o efekcie „npm wymaga wersji semantycznej”.
Steven Lu
++ za zwrócenie uwagi na preferowaną obsługę wydań oznaczonych tagami
Benxamin
@StevenLu Myślę, że to również powinno wspomnieć o używanej wersji Semver, obecnie jest to 2.0.0.
Deoxyseia
12

Prosta odpowiedź - użyj 0.1.0

0.1 nie będzie działać

Miłego kodowania!

Stanislau Baranouski
źródło
4

Więc tak, krótka odpowiedź brzmi: „Musisz użyć wersji semantycznej”

Ale powodem tego jest zapewnienie rozsądnej, jednolitej wersji pakietu wszystkim użytkownikom npm. Otrzymując numer wersji pakietu, masz pewien poziom pewności, że autor rozumie semver i właściwie go używa.

Dziękuję Ci
źródło