以前對語義化版本只有一個概念,大概瞭解是用某個規則對軟件包的版本進行控制,約束和規範公共API的版本迭代。對於具體規則的實際上是不清楚細節的。當本身在公司內部發布或維護某些包的時候,版本定義也很隨意,對使用者來講是挖了一個大坑,痛定思痛,研究一波。
簡介
爲了解決軟件管理領域的「依賴地獄「,制定的一套系統被稱爲語義化的版本控制,在這套約定下,版本號及其更新方式包含了相鄰版本間的底層代碼和修改內容的信息。
是由 Gravatars 創辦者兼 GitHub 共同創辦者 Tom Preston-Werner 所創建。
可分爲正式版和先行版兩個大類npm
正式版本格式
主版本號.次版本號.修訂號,X.Y.Z 版本號遞增規則以下:測試
- 主版本號:當你作了不兼容的 API 修改
- 次版本號:當你作了向下兼容的功能性新增
- 修訂號:當你作了向下兼容的問題修正
X、Y和Z爲非負的整數;如1.0.0 -> 1.0.1 -> 1.1.0,禁止前方補0,好比01.0.0是不符合規範的版本控制
先行版本格式
在發佈大版本或者核心feature前,會發布先行版本進行測試。主要有3種格式rest
- alpha:內部測試版
- beta:公測版
- rc:release candiate,正式版本的候選版
先行版本號能夠加到「主版本號.次版本號.修訂號」的後面,做爲延伸。以-鏈接符加上一連串以.分隔的標識符來修飾。例如1.0.0-alpha.一、1.0.0-beta.二、1.2.0-rc.0,最後一位是次數信息code
升級指南
- 第一個正式版本從1.0.0開始
- 1.0.0發佈的時機:當你的軟件被用於正式環境,它應該已經達到了 1.0.0 版。若是你已經有個穩定的 API 被使用者依賴,也會是 1.0.0 版。若是你很擔憂向下兼容的問題,也應該算是 1.0.0 版了。
- 當主版本號升級時,次版本號和修訂號歸零;當次版本號升級時,修訂號歸零
npm semver
semver 是 由npm團隊對 語義化版本(Semantic Versioning)規範 的一個實現,實現了版本和版本範圍的解析、計算、比較。
文檔
- 固定版本:是指例如 0.2.0、2.2.三、2.1.4-rc.1這樣的特定版本。
- 範圍版本:是對知足規則的版本的一種表示,例如 1.2.3 - 2.3.四、1.x、^0.2.一、~1.2.一、 >1.4
npm中的版本號匹配規則
在npm的依賴規則中,主要有^、~、>、<、>=、<=、 - 、||、x、*這幾種get
當執行npm install xxx時,默認會在被安裝依賴的版本號前加上^it
- ^ :表示同一主版本號中,不小於指定版本的版本號,即固定主版本號,例如目前發佈的版本有2.0.0和1.9.0,^1.1.3對應安裝的版本將是1.9.0
- ~:表示同一主次版本號中,不小於指定版本的版本號,即固定主次版本號,例如^1.1.3會匹配到1.1.三、1.1.四、1.1.5,而2.0.0、1.2.0是不會匹配的
- >、<、>=、<=、 - :指定一個範圍,例如 >1.0.0會匹配到1.0.0、1.1.二、2.2.3,而不會匹配0.1.二、0.9.2,其中要注意的是1.1.0 - 2.2.0,"-"兩邊都是有空格的。
- || :表示或 0.0.1 || 0.3.0 - 15.5.0 會匹配到0.0一、0.3.0、0.3.1 ... 14.5.二、15.5.0,而不會匹配到0.2.二、0.1.2
- *、x:表示通配符 * 對應全部版本號,2.x對應全部主版本爲2的版本號
先行版本號的匹配規則
若是指定版本號不是先行版本號,那麼將不會匹配全部先行版本號的版本。若是指定版本號是先行版本號,則會匹配知足條件的先行版本號io
例如^15.3.0-rc.2能夠匹配到軟件
15.3.0-rc.2
15.3.0-rc.3
15.3.0
15.3.1
15.5.3
而不會匹配到
15.3.0-rc.1
16.1.0-rc.3
15.3.0-beta.4
參考文檔