起頭是因為先看到了 Isaac 所發佈的 npm 更新訊息
Just pushed @npmjs 1.3.0, with SemVer 2 support.
— isaacs (@izs){' '} June 20, 2013
因為不知道文中提到的SemVer2到底是什麼,所以就索性去翻弄一下,原來是個有趣的東西
全名是Semantic Versioning,最近的版本就是 2.0.0,取名也很直接,應該也大概猜到這是做什麼 用的了吧 - 套件版號的命名規則。這是Tom Preston-Werner所提出的規格(說不定名字大家不熟,不過說他是github的創辦人應該就不少人知道了吧,然後最近發現原來Gravatar也是他的作品,真是太威了!!),我猜應該是 github 上面的需要吧,給個讓大家有依循的準則 ;p
雖然取版號是非常平常的一件事,不過老實講我也不知道到底明確的命名是什麼,所以看到這東西還真是讓我驚訝了一下,篇幅 不長,應該花個幾分鐘就可以看完了,這邊稍微摘要一下:
- X.Y.Z (主要/次要/補丁),這是主要的格式,皆為非負整數,數字前不帶零(ex: 01.03.05 都是不合法的),任何更動都要 進版。
- 0.y.x 是開發階段,API 處於不穩定的狀態(隨時都可能變動)。
- x.y.Z - API 相容的除錯/更新
- x.Y.z - 增加新的(但相容)的 API
- X.y.z - 不向下相容的更新
- pre-release 的命名方式 - 連字號+[0-9A-Za-z-](ex: 1.0.2-beta, 2.1.3-0.0.1)
- Build metadata 則是 - 加號+[0-9A-Za-z-](ex: 1.0.1+001, 2.1.3-0.0.1+20130606)。
- 版號的大小,依照主要、次要、補丁、pre-release 的順序依次作比較,有 pre-release 的優先權小於沒有的。(ex:1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0)
大概是這樣,這樣往後套件變動的時候,依循這個規範就可以很清楚知道該怎麼改版號了。NPM 在 1.3.0 之後已經支援最新 2.0.0 版本的規範,對於你所開發的套件版號,必須要依循 SemVer2 的規定,不過相依套件則不需要,可以看一下 Isaac 給的範例,稍微注意一下吧 ;p
@defunctzombie 1.0.0-a.10 > 1.0.0-a.5 1.0.0a invalid 1.0.0+x valid 1.0.0+x == 1.0.0+y 01.2.3 invalid 1.0.0-a.01 invalid +many clarifications
— isaacs (@izs){' '} June 20, 2013