本文作者: 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区间。
参考资料
本文作者: 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/
本文对你有帮助?请支持我