npm 中的模塊版本都須要遵循 semver 2.0 的語義化版本規則。 node
版本格式:主版本號.次版本號.修訂號,版本號遞增規則以下: 主版本號:當你作了不兼容的API 修改, 次版本號:當你作了向下兼容的功能性新增, 修訂號:當你作了向下兼容的問題修正。 先行版本號及版本編譯信息能夠加到「主版本號.次版本號.修訂號」的後面,做爲延伸。 git
而後基於語義化的版本,咱們在選擇版本的時候就能夠對依賴進行版本的控制: github
dependencies: { "express": "3.x", "debug": "*", "express-session": "~1.0.0", "connect-redis": "1.2.3" }
從例子中能夠看到,有許多種選擇版本範圍的風格,能夠在 semver in npm 上看到每個不一樣風格的做用。 而在 node.js 的模塊管理中,最經常使用到的幾種是: redis
其中 ~ 和 ^ 兩個前綴讓人比較迷惑,簡單的來講: express
按照 semver 的規範: npm
可是最終在實踐過程當中,許多包沒有遵循該原則,或者是沒注意破壞了該原則,致使: json
由此引出了下一個話題:如何正確的選擇依賴模塊依賴範圍。 session
在編寫 node 的模塊的時候,模塊自身可能會依賴一些 dependencies, 然而咱們並不想每一次依賴的 模塊有任何小的 bug fix 的時候就要從新更新一次依賴,所以會推薦對大部分的依賴使用 ~ 前綴, 這樣能夠保證能夠享受到這些依賴模塊的 bug fix,而且不須要更新自身的版本。同時,也不會引入 一些 API 變動致使的沒法預料的錯誤。固然,若是對一些徹底信任的模塊也能夠考慮使用 ^ 前綴。 koa
see: koa spa
然而在編寫 node 的項目的時候,咱們更加但願可以追蹤到全部依賴的任何變更,由於項目也不會有 關於自身版本更新的煩惱,所以更加傾向於寫死依賴的版本,這樣若是有任何因爲更加容易追蹤 升級依賴致使的 bug。
see: koa-todo
看完編寫過程當中怎麼樣選擇依賴的範圍,回過頭來看看,若是咱們須要編寫一個發佈到 npm 的模塊, 須要如何選擇發佈的模塊的版本。
遵循這幾條規則,這樣用戶在引入這個模塊的時候就能夠輕鬆的經過 semver 提供的驗證機制來更輕鬆的使用你的模塊。