语义化版本(SemVer)的范围

转载自http://www.u396.com/semver-range.html

在使用Node.js和Bower的时候,其中的 package.json 和 bower.json 都会有dependencies、devDependencies 项,对于此前端开发的童鞋应该会比较熟悉。这里面是运行时和开发时依赖库,其中依赖库对应的版本号有很多种写法,诸如:”~1.0.2
“, “^1.0“, “>=1.0.2“等,其实可以猜测这种写法代表了某种范围,至于具体含义本文给大家做详细解释。

语义化版本格式

我们首先简单了解一下语义化版本版本号,标准的版本格式为:X.Y.Z,其中:

  • X:主版本号,当我们做了不兼容或者颠覆性的更新,修改此版本号。
  • Y:此版本号,当我们做了向下兼容的功能性修改,修改此版本号。
  • Z:修订号,当我们做了向下兼容的问题修正,修改此版本号。
  • 其中X、Y和Z必须为非负整数,禁止数字前补零,每个数值都是递增的。

语义化版本范围

版本范围是一组满足指定范围的比较器,一个比较器是由操作符和版本号组成,下面是最原始的操作符:

  • < 小于;
  • <= 小于等于;
  • > 大于;
  • >= 大于等于;
  • = 等于;如果没有指定操作符,则默认为等于。

一个范围可由一个或者多个比较器组成,如果有多个,则由双竖线(||)连接。对于包含多个比较器,只要满足其一即可。比如:

  • 范围 >=1.2.7 <1.3.0 ,版本号 1.2.7, 1.2.8, 1.2.99 满足条件,而 1.2.6, 1.3.0
    ,1.1.0 确不满足。
  • 范围 1.2.7 || >=1.2.9 <2.0.0 ,版本号 1.2.7, 1.2.9, 1.4.6 满足,而 1.2.8 或者 2.0.0 不满足。

关于测试版

Alpha、Beta、Gamma与α、β、λ谐音,是希腊字母前三个字母,用来表示软件开发过程中测试的三个阶段:

  • Alpha:内测版,内部交流或者专业测试人员测试用;
  • Beta:公测版,专业爱好者大规模测试用,存在一些缺陷,该版本也不适合一般用户安装;
  • Gamma:比较成熟的测试版,与即将发行的正式版相差无几;
  • RC:是 Release Candidate 的缩写,意思是发布倒计时,候选版本,处于Gamma阶段,该版本已经完成全部功能并清除大部分的BUG。到了这个阶段只会除BUG,不会对软件做任何大的更改。从Alpha到Beta再到Gamma是改进的先后关系,但RC1、RC2往往是取舍关系。
  • Stable:稳定版。在开源软件中,都有stable版,这个就是开源软件的稳定发行版。

范围 >1.2.3-alpha.3,版本1.2.3-alpha.7符合条件,而3.4.5-alpha.9却不满足条件。虽然 3.4.5-alpha.9 实际上大于 1.2.3-alpha.3,但是根据 SemVer 的排序规则,这个版本范围只是接受 1.2.3的测试版,而不接受其他版本的测试版。当然 3.4.5 满足条件,因为它不是测试版,并且大于 1.2.3-alpha.7。
这么做是有两个目的,首先测试版会经常更新并且可能包含不适合公开的重大改动,因此被排除在范围之外;再者,虽然用户明确此次使用有风险的测试版本,然而下一版本的测试版被包含进来仍然是不合适的。

版本范围高级用法

在版本范围的高级用法中,与原始的比较器不同,组合不仅仅限于空格和双竖线,它有以下几种方式。

连接符(-)范围 X.Y.Z - A.B.C

下面表示的闭包集合
1.2.3 - 2.3.4 := >=1.2.3 <=2.3.4
如果范围中的第一个版本号只有一部分,剩下的部分以零填充。
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范围 1.2.x 1.X 1.2.* *

X, x 或者 * 可以用在主版本号、此版本号以及修订版本号的任何一个上面。
* := >=0.0.0 (任何版本都满足)

1.x := >=1.0.0 <2.0.0 (只要满足主版本号即可)

1.2.x := >=1.2.0 <1.3.0 (需要满足主版本和此版本号)

部分版本号的含义与X范围表示含义一样,所以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

波浪线(~)范围 ~1.2.3 ~1.2 ~1

~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 (类似于 1.2.x)

~1 := >=1.0.0 <(1+1).0.0 := >=1.0.0 <2.0.0 (类似于 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 (类似于 0.2.x)

~0 := >=0.0.0 <(0+1).0.0 := >=0.0.0 <1.0.0 (类似于 0.x)

~1.2.3-beta.2 := >=1.2.3-beta.2 <1.3.0
注意版本为1.2.3且大于等于beta.2的测试版本在范围内,因此 1.2.3-beta.4
满足条件,而1.2.4-beta.2不满足条件。

补注号(^)范围 ^1.2.3 ^0.2.5 ^0.0.4

允许在不修改[major, minor, patch]中最左非零数字的更改。换句话说,允许在 1.0.0
及以上版本对次版本号和修订版本号的更新,允许在 0.1.0以及以上版本对修订版本号更新,版本为 0.0.X 不允许更新。
^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-beta.2 := >=1.2.3-beta.2 <2.0.0

^0.0.3-beta := >=0.0.3-beta <0.0.4

^1.2.x := >=1.2.0 <2.0.0

^0.0.x := >=0.0.0 <0.1.0

^0.0 := >=0.0.0 <0.1.0

^1.x := >=1.0.0 <2.0.0

^0.x := >=0.0.0 <1.0.0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 语义化版本 2.0.0 摘要 版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 1.主版本号:当你做了不...
    24c41111e47b阅读 328评论 0 0
  • 语义化版本 2.0.0摘要版本格式:主版本号.次版本号.修订号,版本号递增规则如下:主版本号:当你做了不兼容的 A...
    benguo阅读 237评论 0 1
  • 转自 Semantic Versioning 2.0.0 RFC 2119 (Request for Commen...
    i云哲阅读 2,055评论 0 6
  • 一根钢筋的端午臆想 第五根 一根钢筋在切割时 发生臆想 一段切成木浆 一段切成龙舟 在汩罗江的幽...
    第五根阅读 269评论 0 0