npm: Por que uma versão “0.1” é inválida?


90

Tive que mudar a versão do meu aplicativo npm de 0.1 para 0.0.1 para que o npm não fizesse isso.

$ 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!     <npm-@googlegroups.com>

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

Para completar, aqui está o json de trabalho

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

versão costumava ser "0.1" quando cometeu o erro.

É algum tipo de conceito de versão de compatibilidade de API / ABI exigindo 3 conjuntos de números de versão? Por que a mensagem de erro não é mais amigável do que isso?


1
dê uma olhada no npm versioncomando. Ele permite que você incremente a versão semântica com base nos níveis principais, secundários ou de patch. Exemplos: npm version major, npm version minor,npm version patch
Noah

Respostas:


107

Sim, isso é necessário para o controle de versão semântico , que é o esquema de controle de versão que os pacotes npm usam. Aqui está o snippet denpm help json :

A versão deve ser analisada por node-semver , que é empacotado com npm como uma dependência. ( npm install semverpara usar você mesmo.)

Veja como a implementação do semver do npm se desvia do que está no semver.org:

  • As versões podem começar com "v"
  • Um item numérico separado da versão principal de três números por um hífen será interpretado como um número de "construção" e aumentará a versão. Mas, se a tag não for um número separado por um hífen, ela será tratada como uma tag de pré-lançamento e será menor que a versão sem tag. Assim,0.1.2-7 > 0.1.2-7-beta > 0.1.2-6 > 0.1.2 > 0.1.2beta

37
legal. O erro deve apenas dizer algo como "npm requer versão semântica".
Steven Lu

++ para observar o tratamento preferencial de lançamentos marcados
Benxamin

@StevenLu Acho que isso também deve citar a versão do semver que usa, atualmente é 2.0.0.
Deoxyseia


4

Então, sim, a resposta curta é "Você precisa usar versões semânticas"

Mas o raciocínio por trás disso é fornecer uma versão de pacote sensata e uniforme para todos os usuários do npm. Ao obter o número da versão de um pacote, você tem certo nível de confiança de que o autor entende o semver e o está empregando corretamente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.