06. NPM 世界中的版本号种类

NPM Semver

之前我们以 NPM 为例,说到了语义化版本如何在项目中落地的问题,大家也见识了版本号表示方式的灵活性。今天我们来掰扯掰扯 NPM 世界里的版本号都有哪些表示法以及各自的含义。

版本号

这里我们说的版本都是指 http://semver.org/ 2.0.0 中定义的版本号,版本号中打头的=和v字符都会被忽略掉。

区间

版本区间用比较器的集合表示,比较器由五种基本逻辑运算符(>,>=,<,<=,=)表示。如果没有指定运算符,默认为=。一个版本区间可以有多个比较器的集合构成,通过||并起来。比如:

1.2.7 || >=1.2.9 <2.0.0

可以匹配的版本有1.2.7,1.2.9,1.4.6等,但是不会匹配上1.2.8或者2.0.0。

Hyphen(-) 区间

一般形式为:X.Y.Z - A.B.C,表示的是一个闭区间,等价于 >=X.Y.Z <=A.B.C。

如果前半部分不是一个完整的版本号,则默认会以0补全。比如:

1.2 - 2.3.4 等价于 >=1.2.0 <2.3.4

如果后半部分是一个不完整的区间,则所有以该版本号打头的版本都能被接受。比如:

1.2.3 - 2.3 等价于 >=1.2.3 <2.4.0
1.2.3 - 2 等价于 >=1.2.3 <3.0.0

X 区间

常常用x,X,*来代替【主版本号,次版本号,修订版本号】中的一个数字。比如:

* 等价于 >=0.0.0(任意版本)
1.x 等价于 >=1.0.0 <2.0.0(匹配主版本号)
1.2.x 等价于 >=1.2.0 <1.3.0(匹配主版本号和次版本号)

其实一个不完整的版本号可以认为就是一个 X 区间,只是x,X,*被省略了,因此这三个特殊的符号其实是可加可不加的。

Tilde(~) 区间

如果只指定了主版本号,则只比较主版本号;如果指定了主版本号和次版本号,则比较二者;如果都指定了,则都比较。比如:

~1 等价于 >=1.0.0 <2.0.0 也等价于 1.x
~1.2 等价于 >=1.2.0 <1.3.0 也等价于 1.2.x
~1.2.3 等价于 >=1.2.3 <1.3.0

Caret(^) 区间

以左起第一个不为零的数字加一构成区间的上限。举例说明:

^1.2.3 等价于 >=1.2.3 <2.0.0
^1.2 等价于 >=1.2.0 <2.0.0 也等价于 ^1.2.x
^1 等价于 >=1.0.0 <2.0.0 也等价于 ^1.x
^0.0.3 等价于 >=0.0.3 <0.0.4 也等价于 =0.0.3
^0.2.3 等价于 >=0.2.3 <0.3.0
^0.0 等价于 >=0.0.0 <0.1.0 也等价于 ^0.0.x
^0 等价于 >=0.0.0 <1.0.0 也等价于 ^0.x

为什么需要这种表示法呢?对于主版本号大与0的版本号来说,看上去似乎没有太大意义。但对于处于开发阶段的0.x 的版本来说,却非常有帮助,因为这个阶段通常我们升级次版本号表示有向下不兼容的改动,这也是社区里的一个常见做法。

参考资料

http://semver.org/spec/v2.0.0.html
https://docs.npmjs.com/misc/semver

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,323评论 19赞 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,249评论 6赞 13
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,860评论 25赞 708
  • 今晚吃晚饭的时候建议孩子背会书孩子不愿意为这个问题我们两又开始争了一会儿,我说这是老师说的,孩子说今天老师又说让他...
    丽萍在这阅读 229评论 2赞 3
  • 1.从应用中获取图片 2.从本地缓存中获取图片 3.将图片写入相册
    Gear_033e阅读 335评论 0赞 0

友情链接更多精彩内容