npm 中的模塊版本都需要遵循 semver 2.0 的語義化版本規則。
版本格式:主版本號.次版本號.修訂號,版本號遞增規則如下: 主版本號:當你做了不兼容的API 修改, 次版本號:當你做了向下兼容的功能性新增, 修訂號:當你做了向下兼容的問題修正。 先行版本號及版本編譯信息可以加到“主版本號.次版本號.修訂號”的后面,作為延伸。
然后基於語義化的版本,我們在選擇版本的時候就可以對依賴進行版本的控制:
dependencies: { "express": "3.x", "debug": "*", "express-session": "~1.0.0", "connect-redis": "1.2.3" }
從例子中可以看到,有許多種選擇版本范圍的風格,可以在 semver in npm 上看到每一個不同風格的作用。 而在 node.js 的模塊管理中,最常用到的幾種是:
*: 任意版本
1.1.0: 指定版本
~1.1.0: >=1.1.0 && < 1.2.0
^1.1.0: >=1.1.0 && < 2.0.0
其中 ~ 和 ^ 兩個前綴讓人比較迷惑,簡單的來說:
~ 前綴表示,安裝大於指定的這個版本,並且匹配到 x.y.z 中 z 最新的版本。
^ 前綴在 ^0.y.z 時的表現和 ~0.y.z 是一樣的,然而 ^1.y.z 的時候,就會 匹配到 y 和 z 都是最新的版本。
特殊的是,當版本號為 ^0.0.z 或者 ~0.0.z 的時候,考慮到 0.0.z 是一個不穩定版本, 所以它們都相當於 =0.0.z。