nodejs 的模块,版本号里的 ~ ^ * 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",
  }
}
阅读 13.9k
3 个回答

~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 版本;

x.y.z 或 <=x.y.z: 大于 x.y.z 的最大版本或与 x.y.z 最接近的版本
x.y.z: 选择 x.y.z

*: 任意版本,一般是最后一次正式发布版本(包括非 latest tag),不是最大版本号版本

这是 Semantic-Versioning 语义化版本控制

一个标准的版本号必须是X.Y.Z的形式,X是主版本,Y是副版本,Z是补丁版本。.

  • X: 代表发生了不兼容的API改变

  • Y: 代表向后兼容的功能性变化

  • Z: 代表向后兼容bug fixes

语义化版本号规则
X.Y.Z - A.B.C 连字符范围

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.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 等价于 >=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

参考文档

http://semver.org/
https://docs.npmjs.com/misc/s...

这是一种叫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)

1 篇内容引用
推荐问题
宣传栏