Node.js 系列學習日誌#24 - npm 相依套件指定版本與自動更新 package.json

在管理套件工具的版本時,在 package.json 檔案裡面有一個 dependencies 的部分,裡面包含著套件的名稱與版本號,今天要談的是版本號的指定。

而這個版本號的指定是有個規範,它是語意化版本 http://semver.org/lang/zh-TW/ 根據它作為版號的規則

版本格式:主版號.次版號.修訂號 也就是 Major.Minor.Path 的形式

  1. 主版號:當你做了不相容的 API 修改,
  2. 次版號:當你做了向下相容的功能性新增,
  3. 修訂號:當你做了向下相容的問題修正。
    那麼在 package.json 檔案裡面的相依套件的版本要怎麼填呢?版本號的範圍?
  • 1.2.3, = 1.2.3 : 指定版本 1.2.3
  • 1.2.3 :大於 1.2.3

  • <1.2.3 :小於 1.2.3
  • =1.2.3 :大於 1.2.3

  • <=1.2.3:小於 1.2.3
  • 1.2.3 - 2.3.4 :大於 1.2.3 且小於 2.3.4
  • ~1.2.3 :合理接近 1.2.3 版本, 等價 >=1.2.3-0 <1.3.0-0
  • ~1.2 :等價 >1.2.0-0 <1.3.0-0,也就是 1.2 版本的同樣等價於 1.2.x 版本奧
  • ~1:等價於 >1.0.0-0 <2.0.0-0 ,也就是 1 開頭的版本等價於 1.x 版本號
    • :任意版本

最上面的圖,使用了好幾種定義版本的方式,就以 * 的寫法風險也比較大一點,因為無法保證 npm 安裝的版本是最新的版本,最保守一點的就是直接指定版本號,而如何得知版本號,可以透過

1
$npm info {套件名稱} version

方式去做查詢。


介紹 autod

https://github.com/node-modules/autod

這是一個自動分析所有的文件,引入的模組不需要手動更新 package.json ,並且它會同時自動更新 package.json

先看一下有哪些的 help 可以使用

接著開始執行 autod 的指令,在這邊我下了一個 -e 把 public, view 忽略,另外 -w 讓這份 package.json 能夠自動更新寫入

原始的 package.json

自動修正後的 package.json

是不是有很大的不同呢,而且又能夠自動更新,試試看囉

參考資料

  1. http://semver.org/lang/zh-TW/
  2. http://blog.eisneim.com/articles/2014-7-5-meaning-of-npm-bower-version-prefix.html
  3. https://cnodejs.org/topic/52dcc0a578990b04112e2f09