跳轉到

3.2 依賴分類與語意化版本#

dependencies vs devDependencies#

dependencies devDependencies
用途 程式執行時需要的套件 開發時需要的工具
例子 express、mongoose、react eslint、jest、nodemon、prettier
安裝指令 npm install <pkg> npm install -D <pkg>
上線部署時 會被安裝 不會被安裝(npm install --production)

判斷法:程式碼裡被 import/require 的 → dependencies;只在開發時用的工具 → devDependencies。

分對的好處:部署到正式環境時不用下載一堆測試與 lint 工具,更快更乾淨。

語意化版本(SemVer):^ 和 ~ 是什麼?#

套件版本號 4.19.2 的三段數字代表:

4  .  19  .  2
│     │     └── patch:修 bug(不影響使用方式)
│     └──────── minor:新增功能(向下相容)
└────────────── major:重大變更(可能不相容,會壞)

package.json 裡常見的前綴:

寫法 意思 允許更新的範圍
^4.19.2 允許 minor/patch 更新 4.x.x(最常用)
~4.19.2 只允許 patch 更新 4.19.x
4.19.2 完全鎖死 只有這版

^ 是預設值,代表「信任作者不會在 major 版本內弄壞你」。但要注意:minor 更新仍可能帶來行為改變,所以正式專案要搭配 lock 檔(見下一節)。

依賴越多,風險越大#

  • 每個套件都是一份安全與維護成本
  • 只裝真正需要的,定期 npm outdated 檢查
  • 安裝前看一下套件的每週下載量與最後更新時間,太冷門或不維護的不要用