本文作者: jsweibo
本文链接: https://jsweibo.github.io/2019/04/14/npm%E4%B8%AD%E7%9A%84%E8%AF%AD%E4%B9%89%E5%8C%96%E7%89%88%E6%9C%AC%E5%8E%9F%E5%88%99/
摘要
本文主要讲述了:
- 什么是 semver
- 安装
- 版本格式
- 版本比较符号
- 高级范围语法
正文
什么是 semver
npm 根据语义化版原则,实现了semver
这个包,用来管理 npm 包的版本。
安装
局部安装
1 |
|
版本格式
参考语义化版本原则一文。
版本比较符号
>=
大于等于>
大于=
等于<=
小于等于<
小于||
或空白字符 交集运算符
示例:
>1.0.0 || <2.0.0
表示介于1.0.0
与2.0.0
之间的版本。>1.0.0 <2.0.0
表示介于1.0.0
与2.0.0
之间的版本。
当版本区间存在prerelease tag时,若版本不存在 prerelease tag,允许比较。
示例:
1.2.3
属于>1.2.3-alpha.3
区间。3.4.5
属于>1.2.3-alpha.3
区间。
当版本区间存在prerelease tag时,若版本也存在 prerelease tag,则只有在两者的major-version.minor-version.patch-version
都相同时,才允许比较。
示例:
1.2.3-alpha.7
、1.2.3-beta.7
、1.2.3-rc.7
属于>1.2.3-alpha.3
区间。3.4.5-alpha.9
不属于>1.2.3-alpha.3
区间,虽然从语义化版本原则上来说,3.4.5-alpha.9
比1.2.3-alpha.3
高。3.4.5-alpha.9
不属于>1.2.3
区间,虽然从语义化版本原则上来说,3.4.5-alpha.9
比1.2.3
高。
这么做的原因有 2 点:
- pre-release-version 更新快速且频繁,其中可能包含破坏式变更,不适合用户使用。
- 使用 pre-release-version 的用户明确知道可能存在的隐患,但将此隐患延续到未来版本的 pre-release-version 不太合理。
当然开发者也可以在选项参数里将includePrerelease
设置为true
来修改这一行为。
高级范围语法
-区间
连字符表示闭区间。
示例:
1.0.0 - 2.0.0
表示>=1.0.0 || <= 2.0.0
区间。1.0.0-beta.0 - 2.0.0
表示>=1.0.0-beta.0 || <=2.0.0
区间。注意:1.2.4-beta.2
、1.2.5-beta.1
、1.2.6-beta.2
不属于此区间。
如果左边的区间只有 partial-version,则剩余的位以0
填充。
示例:
1 - 2.0.0
表示>=1.0.0 || <=2.0.0
区间。1.1 - 2.0.0
表示>=1.1.0 || <=2.0.0
区间。
如果右边的区间只有 partial-version,则以 partial-version 为开头的版本都被包括在内,但不能超过 partial-version。
示例:
1.0.0 - 2.0
表示>=1.0.0 || <2.1.0
区间。1.0.0 - 2
表示>=1.0.0 || <3.0.0
区间。
X 区间
X
、x
、*
都可以代替major-version.minor-version.patch-version
中的一位。
示例:
1.0.x
表示>=1.0.0 || <1.1.0
区间。1.x
表示>=1.0.0 || <2.0.0
区间。x
表示>=0.0.0
区间。
partial-version 也可以被看作 X 区间。
- 空字符串表示
*
区间和>=0.0.0
区间。 1
表示1.x.x
区间和>=1.0.0 || <2.0.0
区间。1.2
表示1.2.x
区间和>=1.2.0 || <1.3.0
区间。
~区间
- 如果 minor-version 已指定,则允许 patch-version 的递增(包括不变)。
- 如果 minor-version 未指定,则允许 minor-version 的递增(包括不变)。
示例:
~1.0.0
表示>=1.0.0 || <1.1.0
区间。~1.0
表示>=1.0.0 || <1.1.0
区间。~1
表示>=1.0.0 || <2.0.0
区间。~0
表示>=0.0.0 || <1.0.0
区间。~1.2.3-beta.2
表示>=1.2.3-beta.2 || <1.3.0
区间。注意:1.2.4-beta.2
、1.2.5-beta.1
、1.2.6-beta.2
不属于此区间。
^区间
允许递增(包括不变)除major-version.minor-version.patch-version
中左起第 1 个非 0 的位之外的任何位。
也就是说,
- 允许
x.0.0
区间的版本更新 minor-version、patch-version - 允许
0.x
区间的版本更新 patch-version - 不允许
0.0.x
区间的版本更新
示例:
^1.0.0
表示>=1.0.0 || <2.0.0
区间。^0.1.0
表示>=0.1.0 || <0.2.0
区间。^0.0.1
表示>=0.0.1 || <0.0.2
区间。^1.0.0-beta.0
表示>=1.0.0-beta.0 || < 2.0.0
区间。注意:1.2.4-beta.2
、1.2.5-beta.1
、1.2.6-beta.2
不属于此区间。
许多开发者将0.x
中的x
当作破坏式变更标识符。
如果左边的区间只有 partial-version,则剩余的位以0
填充。
示例:
^0
表示^0.0.0
区间和>=0.0.0 || <1.0.0
区间。^1
表示^1.0.0
区间和>=1.0.0 || <2.0.0
区间。^1.1
表示^1.1.0
区间和>=1.1.0 || <2.0.0
区间。