本篇文章由和 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/ 裡面。
  • 安裝後, expresscors 的資訊會寫入 my-backend/package.jsondependencies 欄位。
  • 除非你加上 -g 選項(像是 npm install -g express ),否則不會進行全域安裝(即安裝到你的 D 槽或其他系統層級的位置)。如果以後有需要全域使用某些工具(例如 nodemontypescript CLI),那時才考慮用 -g 安裝就可以了。

用 local 安裝的方式就像是把每個專案放在自己的小房間裡,彼此互不干擾:

  • 不同專案可以用不同版本的套件。
  • 就算一個套件升級或改壞了,也不會波及到其他專案。
  • 搭配 package.jsonpackage-lock.json ,還能確保專案之間的套件版本一致,方便團隊合作和部署。

# ✅ 結論

結論:你這裡的 npm install express corslocal 安裝在 my-backend 專案中,並不會影響你系統上的其他專案或全域套件。


# package vs package-lock

package.json 和 package-lock.json 個別的用途和差異?

package.jsonpackage-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.jsonpackage-lock.json
主要用途定義依賴與專案資訊鎖定實際安裝的所有版本
是否手動編輯✅ 常手動編輯🚫 通常由 npm 自動生成與更新
是否包含子依賴❌ 不包含✅ 包含所有遞迴依賴的版本資訊
是否適合版本控制(git)✅ 是✅ 是(強烈建議一起提交)

# ✅ 結論

  • package.json 是「我要什麼」。
  • package-lock.json 是「我現在有什麼」。

兩個都很重要,尤其在團隊開發或部署環境中, package-lock.json 可大幅降低「版本不一致導致出錯」的風險。

Edited on