package.json 中波浪号~ 异或号^ 是什么意思?

后端1 min
#Node#npm
目录(4)

版本号段落解读

版本格式:主版本号.次版本号.修订号,版本号递增规则如下:

主版本号(Major):当你做了不兼容的 API 修改,
次版本号(Minor):当你做了向下兼容的功能性新增,
修订号(Patch):当你做了向下兼容的问题修正。
先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

我们常见的版本号,如 v1.2.3,其本身并不是语义化版本号,但是通过 ‘v’ 前缀标识版本号是我们常用的方式。 1.2.3 才是严格意义上的语义化版本号。 其中 1 为主版本号(major),2 为次版本号(minor),3 为修订号(patch)。

~ 波浪号 的含义

指定了次要版本,则允许补丁版本变更,否则允许次要版本变更。

下面是给出的几个例子,方便大家理解:

  • ~1.2.3 := >=1.2.3 <1.3.0 (Same as 1.2.x)
  • ~1.2 := >=1.2.0 <1.3.0 (Same as 1.2.x)
  • ~1 := >=1.0.0 <2.0.0 (Same as 1.x.x)
  • ~0.2.3 := >=0.2.3 <0.3.0 (Same as 0.2.x)
  • ~0.2 := >=0.2.0 <0.3.0 (Same as 0.2.x)
  • ~0 := >=0.0.0 <1.0.0 (Same as 0.x.x)

^ 异或号 的含义

不允许破坏性变更,锁定从左起,第一位不为 0 的版本号

下面是给出的几个例子,方便大家理解:

  • ^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

这个定义可能有违大家的基础认识。比如我们都知道 ^1.2.3 允许下载 >= 1.2.3 < 1.3.0 的版本。但是对于 ^0.1.2 相信很多朋友会误以为其范围是 >= 0.1.2 < 1.0.0 实际上为 >= 0.1.2 < 0.2.0

相关链接

semver 规则

node-semve — npm