本篇文章由和 Chatgpt 的對話整理而成。
# npm 安裝範圍解釋
這段指令:
mkdir my-backend | |
cd my-backend | |
npm init -y | |
npm install express cors |
其中的 npm install express cors 是 「local 安裝」,也就是安裝在你剛建立的 my-backend 資料夾中。
# 詳細說明
npm install預設是 local 安裝,會把套件下載到當前資料夾的node_modules/裡面。- 安裝後,
express和cors的資訊會寫入my-backend/package.json的dependencies欄位。 - 除非你加上
-g選項(像是npm install -g express),否則不會進行全域安裝(即安裝到你的 D 槽或其他系統層級的位置)。如果以後有需要全域使用某些工具(例如nodemon或typescriptCLI),那時才考慮用-g安裝就可以了。
用 local 安裝的方式就像是把每個專案放在自己的小房間裡,彼此互不干擾:
- 不同專案可以用不同版本的套件。
- 就算一個套件升級或改壞了,也不會波及到其他專案。
- 搭配
package.json和package-lock.json,還能確保專案之間的套件版本一致,方便團隊合作和部署。
# ✅ 結論
結論:你這裡的 npm install express cors 是 local 安裝在 my-backend 專案中,並不會影響你系統上的其他專案或全域套件。
# package vs package-lock
package.json 和 package-lock.json 個別的用途和差異?
package.json 和 package-lock.json 雖然常常一起出現,但它們的用途和角色其實很不同:
# 🗂 package.json — 專案的「說明書」
用途:
定義你的專案資訊:名稱、版本、描述等。
指定你的專案「需要哪些套件」及其版本範圍(像是
"express": "^4.18.2")。記錄 scripts,例如:
"scripts": {
"start": "node index.js"
}其他資訊:授權、作者、依賴類型等。
範例重點:
"dependencies": { | |
"express": "^4.18.2" | |
} |
這裡的 ^ 代表允許安裝 向上相容的小版本更新(如 4.19.0 )。
# 🔒 package-lock.json — 套件版本的「快照」
用途:
- 精準記錄目前安裝的每個套件(包含其「所有的子依賴」)的實際版本。
- 確保不同環境中(開發機、部署環境、CI/CD)安裝出來的內容完全一致。
- 幫助 npm 更快進行安裝,因為它知道要裝哪些確切版本。
範例:
"express": { | |
"version": "4.18.2", | |
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", | |
"integrity": "sha512-..." | |
} |
它記錄了實際安裝的版本,並加上完整的來源與驗證資訊。
# 🆚 差異比較表
| 功能 / 屬性 | package.json | package-lock.json |
|---|---|---|
| 主要用途 | 定義依賴與專案資訊 | 鎖定實際安裝的所有版本 |
| 是否手動編輯 | ✅ 常手動編輯 | 🚫 通常由 npm 自動生成與更新 |
| 是否包含子依賴 | ❌ 不包含 | ✅ 包含所有遞迴依賴的版本資訊 |
| 是否適合版本控制(git) | ✅ 是 | ✅ 是(強烈建議一起提交) |
# ✅ 結論
package.json是「我要什麼」。package-lock.json是「我現在有什麼」。
兩個都很重要,尤其在團隊開發或部署環境中, package-lock.json 可大幅降低「版本不一致導致出錯」的風險。