我必须将我的npm app的版本从0.1更改为0.0.1,以便npm不要这样做。
$ 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
为了完整性,这里是工作的json
$ cat package.json
{
"name": "ply",
"description": "ply server for local dev testing deployments",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "3.x"
}
}
版本在出错时曾经是“0.1”。
这是某种API / ABI兼容版本控制概念,需要3套版本号吗?为什么错误消息不是更友好w.r.t.此?
答案 0 :(得分:91)
是的,这是semantic versioning所必需的,这是npm包使用的版本控制方案。这是the snippet from npm help json
:
版本必须由node-semver解析,它与npm捆绑在一起作为依赖项。 (
npm install semver
自己使用它。)以下是npm的semver实现偏离semver.org上的内容:
- 版本可以以“v”
开头- 通过连字符与主三位数版本分隔的数字项将被解释为“构建”编号,并将增加版本。但是,如果标记不是用连字符分隔的数字,那么它被视为预发布标记,并且小于没有标记的版本。所以,
0.1.2-7 > 0.1.2-7-beta > 0.1.2-6 > 0.1.2 > 0.1.2beta
答案 1 :(得分:4)
所以,简而言之就是“你需要使用语义版本化”
但其背后的原因是为所有npm用户提供合理,统一的软件包版本。获取软件包的版本号时,您可以一些信任级别,以便作者理解semver并正确使用它。
答案 2 :(得分:0)
简单答案:
如果要使用软件包版本,请假设class Foo {}
const f = new Foo();
console.log(f.constructor.prototype == f.__proto__);
// same as
console.log(f.constructor.prototype == Foo.prototype);
// same as
console.log(Foo.prototype == Foo.prototype);
,但不断收到警告'0.1'
,然后将其更改为Invalid version: "0.1"
。完成。