早在五、六年前因為各種套件工具的釋出,用來輔助開發專案的套件也越來越多。
對於套件開發者而言,要讓每次改版所附加的版號更有意義也是很頭大的,而對於使用套件的人來說更新套件,更新到太新的套件版本不小心讓專案爆炸也是很頭大的。
所以有些東西就這樣誕生了。
版號的意義
對於撰寫套件的人這個規範就很重要了,它規範了版號擁有三層數字以及後缀詞的用法,格式如下:
major.minor.patch-metadata
major 作為套件的主版號,各版號間的功能並不相容。
minor 次版號,當有功能被實作時並且相容於前一版。
patch 修訂號,通常用於錯誤修正。
metadata 後缀詞,通常用來敘述版本,可不使用。
符號的意義
對於使用套件的人來說,這個就很重要了,前面說到的各種套件管理工具釋出的年代,其中最有名的工具就是 NPM 了,在那個 node.js 很紅,紅到就算是不穩定也還是硬拿來寫我碩士論文的年代。
通常我們會看到這樣的版本敘述:
^1.24.5
~2.4
這樣的符號常用的有以下幾種 *、^ 及 ~。
* (widecard) 表示所以版本都吃,所以後面不用加上任何版號。
^ (caret) 表示固定住主版號 major ,只更新有向下相容的新功能最新版本。
~ (tilde) 表示固定住主版號 major 及次版號 minor,只更新錯誤修正個新版本。
然後還有像是 > 及 < 這類數學符號的用法,如果所使用套件的依賴關聯性很嚴格可能會用到,用來限制版本範圍。
最後
雖然上面有明確的規範了,但照著規範走還是有機會爆炸的,人出來走跳總是要還...像是最近更新修訂號就炸的 React 16.6.2 XD