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檢查 - 安裝前看一下套件的每週下載量與最後更新時間,太冷門或不維護的不要用