NPM semver && 语义化版本控制规范(Semantic version)

使用三个整数来记录版本号:MAJOR.MINOR.PATCH(主版本号.次版本号.修订号)

用户

可以在 package.json 中指定特定版本或设置版本范围来匹配需要的版本

符号 规则 示例
> < >= <= = 优先层级比较器  
|| 使用 逻辑组合上述比较器  
空格 使用 逻辑组合上述比较器  
- 指定版本范围 1.2.3 - 2.3.4 := >=1.2.3 <=2.3.4
1.2.3 - 2.3 := >=1.2.3 <2.4.0
1.2.3 - 2 := >=1.2.3 <3.0.0
1.2 - 2.3.4 := >=1.2.0 <=2.3.4
* 或 x 代表major、 minor或 patch的版本数字 * := >=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)
"" (empty string) := * := >=0.0.0
1 := 1.x.x := >=1.0.0 <2.0.0
1.2 := 1.2.x := >=1.2.0 <1.3.0
~ 匹配最新的patch版本 ~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)
^ 匹配最新的minor版本 ^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

带有先行版本号、版本编译信息的匹配规则较少用到,在此不做记录,可移至文末链接阅读。

建议使用~来标记版本号,保证包中的bug可以得到修复,同时避免依赖包大变动影响项目稳定性

:= means 定义为

版本的优先层级指的是不同版本在排序时如何比较。判断优先层级时,“必须 MUST ”把版本依序拆分为主版本号、次版本号、修订号及先行版本号后进行比较(版本编译信息不在这份比较的列表中)。由左到右依序比较每个标识符号,第一个差异值用来决定优先层级:主版本号、次版本号及修订号以数值比较,例如:1.0.0 < 2.0.0 < 2.1.0 < 2.1.1。当主版本号、次版本号及修订号都相同时,改以优先层级比较低的先行版本号决定。例如:1.0.0-alpha < 1.0.0。有相同主版本号、次版本号及修订号的两个先行版本号,其优先层级“必须 MUST ”透过由左到右的每个被句点分隔的标识符号来比较,直到找到一个差异值后决定:只有数字的标识符号以数值高低比较,有字母或连接号时则逐字以 ASCII 的排序来比较。数字的标识符号比非数字的标识符号优先层级低。若开头的标识符号都相同时,栏位比较多的先行版本号优先层级比较高。范例:1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0- rc.1 < 1.0.0。

发布者

新发布的项目版本应该是 1.0.0

主版本号为零(0.y.z)的软件处于开发初始阶段,一切都可能随时被改变。这样的公共 API 不应该被视为稳定版。

版本号递增规则如下

其他

标识符号必须由 ASCII 码的英数字和连接号 [0-9A-Za-z-] 组成,且禁止留白。数字型的标识符号禁止在前方补零。

npm/semver

semver

jungle