semver 簡(jiǎn)介
semver 是 語(yǔ)義化版本(Semantic Versioning)規(guī)范 的一個(gè)實(shí)現(xiàn)厦章,目前是由 npm 的團(tuán)隊(duì)維護(hù),實(shí)現(xiàn)了版本和版本范圍的解析照藻、計(jì)算袜啃、比較。
semver 的兩個(gè)概念
- 固定版本:是指例如 0.4.1幸缕、1.2.7群发、1.2.4-beta.0 這樣表示包的特定版本的字符串。
- 范圍版本:是對(duì)滿足特定規(guī)則的版本的一種表示发乔,例如 1.2.3-2.3.4熟妓、1.x、^0.2栏尚、>1.4.
版本號(hào)格式
主版本號(hào)[MAJOR].次版本號(hào)[MINOR].修訂號(hào)[PATCH]起愈,版本號(hào)遞增規(guī)則如下:
- 主版本號(hào):當(dāng)做了不兼容的 API 修改,
- 次版本號(hào):當(dāng)做了向下兼容的功能性新增译仗,
- 修訂號(hào):當(dāng)做了向下兼容的問(wèn)題修正抬虽。
先行版本號(hào)及版本編譯信息可以加到“主版本號(hào).次版本號(hào).修訂號(hào)”的后面,作為延伸纵菌。
當(dāng)主版本號(hào)升級(jí)后阐污,次版本號(hào)和修訂號(hào)需要重置為0,次版本號(hào)進(jìn)行升級(jí)后咱圆,修訂版本需要重置為0笛辟。
先行版本號(hào)(Pre-release Version)
先行版本號(hào)可以作為發(fā)布正式版之前的版本功氨,格式是在修訂版本號(hào)后面加上一個(gè)連接號(hào)(-),再加上一連串以點(diǎn)(.)分割的標(biāo)識(shí)符隘膘,標(biāo)識(shí)符可以由英文、數(shù)字和連接號(hào)([0-9A-Za-z-])組成杠览。example:
1.0??.0-alpha
1.0.0-alpha.1
1.0.0-0.3.7
1.0.0-x.7.z.92
以下是一些常見的先行版本號(hào)名稱:
- alpha:是內(nèi)部測(cè)試版,一般不向外部發(fā)布,會(huì)有很多Bug.一般只有測(cè)試人員使用弯菊。
- beta:也是測(cè)試版,這個(gè)階段的版本會(huì)一直加入新的功能踱阿。在Alpha版之后推出
- rc:Release Candidate) 系統(tǒng)平臺(tái)上就是發(fā)行候選版本管钳。RC版不會(huì)再加入新的功能了,主要著重于除錯(cuò)软舌。
定義依賴版本號(hào)
在 npm 的依賴的規(guī)則中才漆,還有 ~
、>
佛点、<
醇滥、=
、>=
超营、<=
鸳玩、-
、||
演闭、x
不跟、X
、*
等符號(hào)米碰;當(dāng)使用 npm install XX
時(shí)窝革,被安裝的依賴的版本號(hào)前會(huì)默認(rèn)加上 ^
符號(hào)。
-
^
:表示同一主版本號(hào)中吕座,不小于指定版本號(hào)的版本號(hào)
`^2.2.1` 對(duì)應(yīng)主版本號(hào)為 2虐译,不小于 `2.2.1` 的版本號(hào),比如 `2.2.1`吴趴、`2.2.2`菱蔬、`2.3.0` ,主版本號(hào)固定
// 當(dāng)該依賴有最新版本時(shí)(eg:2.3.3),npm install 會(huì)安裝最新的依賴
-
~
:表示同一主版本號(hào)和次版本號(hào)中史侣,不小于指定版本號(hào)的版本號(hào)
`~2.2.1` 對(duì)應(yīng)主版本號(hào)為 2拴泌,次版本號(hào)為 2,不小于 `2.2.1` 的版本號(hào)惊橱,比如 `2.2.1蚪腐、2.2.2`,主版本號(hào)和次版本號(hào)固定
-
>
税朴、<
回季、=
家制、>=
、<=
泡一、-
:用來(lái)指定一個(gè)版本號(hào)范圍
`>2.1`
`1.0.0 - 1.2.0`
//注意使用 `-` 的時(shí)候颤殴,必須兩邊都有空格。
-
||
:表示或
`^2 <2.2 || > 2.3`
-
x
鼻忠、X
涵但、*
:表示通配符
`*` 對(duì)應(yīng)所有版本號(hào)
`3.x` 對(duì)應(yīng)所有主版本號(hào)為 3 的版本號(hào)
npm 中 package-lock.json 的一些坑
在 npm install 后,會(huì)生成一個(gè) package-lock.json 文件用于保存當(dāng)前安裝依賴的各種來(lái)源及版本號(hào)帖蔓。
在 npm 5.4.2版本后矮瘟,package-lock.json 的變動(dòng)規(guī)則:
- 當(dāng)在 install dependency 的指定版本時(shí),會(huì)自動(dòng)更新 package-lock.json 文件中該 dependency 的 version 到指定的 version
- 當(dāng)在 install dependency 的范圍版本時(shí)塑娇,當(dāng)前的 version 低于or等于 package-lock.json 文件中對(duì)應(yīng)的 dependency 的 version 時(shí)澈侠,會(huì)安裝 package-lock.json 中的 version;
package.json
"antd": "^3.6.1", // eg:最新版本是 3.9.4
package-lock.json
"antd": "3.7.1",
執(zhí)行npm install 會(huì)安裝 3.7.1 版本
如果高于 package-lock.json 中對(duì)應(yīng)的 dependency 的 version 時(shí)埋酬,會(huì)安裝當(dāng)前范圍版本號(hào)中最高的版本哨啃,會(huì)更新 package-lock.json 文件中對(duì)應(yīng)的版本號(hào);