例如:
{
"name": "wdd",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "^1.13.2",
"cookie-parser": "~1.3.5",
"ejs": "*",
"express": "~4.13.x",
}
}
例如:
{
"name": "wdd",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "^1.13.2",
"cookie-parser": "~1.3.5",
"ejs": "*",
"express": "~4.13.x",
}
}
一个标准的版本号必须是X.Y.Z的形式,X是主版本,Y是副版本,Z是补丁版本。.
X: 代表发生了不兼容的API改变
Y: 代表向后兼容的功能性变化
Z: 代表向后兼容bug fixes
1.2.3 - 2.3.4 等价于 >=1.2.3 <=2.3.4
1.2.3 - 2 等价于 >=1.2.3 <3.0.0
~1.2.3 等价于 >=1.2.3 <1.(2+1).0 等价于="">=1.2.3 <1.3.0
~1.2 等价于 >=1.2.0 <1.(2+1).0 等价于="">=1.2.0 <1.3.0 (Same as 1.2.x)
~1 等价于 >=1.0.0 <(1+1).0.0 等价于 >=1.0.0 <2.0.0 (Same as 1.x)
~0.2.3 等价于 >=0.2.3 <0.(2+1).0 等价于="">=0.2.3 <0.3.0
~0.2 等价于 >=0.2.0 <0.(2+1).0 等价于="">=0.2.0 <0.3.0 (Same as 0.2.x)
~0 等价于 >=0.0.0 <(0+1).0.0 等价于 >=0.0.0 <1.0.0 (Same as 0.x)
脱字符范围之后指定从左面起第一个非零位置的范围。
^1.2.3 等价于 >=1.2.3 <2.0.0
^0.2.3 等价于 >=0.2.3 <0.3.0
^0.0.3 等价于 >=0.0.3 <0.0.4,即等价于0.0.3
当然如果最后一位省略了或为通配符x,X,*,则指定前一位字符的范围,如
^1.2.x 等价于 >=1.2.0 <2.0.0
^0.0.x 等价于 >=0.0.0 <0.1.0
^0.0 等价于 >=0.0.0 <0.1.0
这是一种叫semver
的版本表示法,~^*x
都是范围表示方式,参考:semver-ranges
<
Less than
<=
Less than or equal to
>
Greater than
>=
Greater than or equal to
=
Equal. If no operator is specified, then equality is assumed, so this operator is optional, but MAY be included.
Any of
X
,x
, or*
may be used to "stand in" for one of the numeric values in the[major, minor, patch]
tuple.
*
:= >=0.0.0 (Any version satisfies)
1.x
:= >=1.0.0 <2.0.0 (Matching major version)
1.2.x
:= >=1.2.0 <1.3.0 (Matching major and minor versions)
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
~x.y.z: 匹配大于 x.y.z 的 z 的最新版
^x.y.z: 匹配大于 x.y.z 的 y.z 的最新版
当 x 为 0 时,^x.y.z 等价于 ~x.y.z,即只会安装z 的最新版本;
当 x 和 y 为 0 时,^x.y.z 等价于 x.y.z,即只会安装x.y.z 版本;
*: 任意版本,一般是最后一次正式发布版本(包括非 latest tag),不是最大版本号版本