Node.js package.json:專案身分證與配置核心詳解

在每個 Node.js 專案的根目錄下,一定能看到 package.json。它不僅僅是專案的清單,更是整個開發工作流、套件依賴與部署指令的指揮中心。

基礎身分與元數據 (Metadata)

這些欄位定義了專案的基本屬性,對於發布 NPM 套件尤為重要:

  • name:專案名稱。必須是全小寫,不能有空白。
  • version:符合 語意化版本 (SemVer) 規範,例如 1.2.3(重大更新.功能更新.錯誤修復)。
  • main:定義程式的進入路徑(如 index.js),當別人 require 你的套件時,Node 會讀取此檔案。
  • type"module" 代表專案全面使用 ES Modules;"commonjs" (預設) 代表使用 CommonJS。

依賴管理:dependencies 與 devDependencies

這是檔案中最核心的部分,區分了專案在不同階段需要的工具。

1. dependencies (運行依賴)

應用程式在 正式生產環境 運行時不可或缺的套件(如 express, mongoose, dotenv)。

  • 安裝指令:npm install <pkg>

2. devDependencies (開發依賴)

僅在 開發測試階段 需要的工具,正式部署時不需要(如 nodemon, jest, eslint, prettier)。

  • 安裝指令:npm install <pkg> --save-dev

版本符號解析

  • ^1.2.3 (Caret):允許更新到下一個大版本前的最新版(最常用)。
  • ~1.2.3 (Tilde):僅允許更新修補版本 (Patch)。
  • 1.2.3:鎖定版本,完全不更新。

Scripts:自定義自動化指令

透過 scripts 欄位,你可以將冗長的終端機指令封裝成簡短的代稱。

"scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js",
    "test": "jest --watchAll",
    "lint": "eslint . --fix"
}
  • 執行方式:npm run dev(注意:starttest 可省略 run 直接執行)。

為什麼需要 package-lock.json?

每當你執行 npm install,系統會自動產生或更新此檔案。它完整紀錄了所有依賴套件(包含遞迴層級)的 確切版本與雜湊值

  • 核心價值:確保整個開發團隊以及 CI/CD 伺服器所安裝的環境 100% 同步,避免「我的電腦可以跑,但部署就壞掉」的窘境。
不要手動修改 package-lock.json。所有的更動都應透過 npm 指令自動維護,並務必將它提交到 Git 倉庫中。

總結

  1. package.json 是每個 Node.js 開發者必須精通的檔案。
  2. 養成區分 dependenciesdevDependencies 的好習慣,能讓正式環境的映像檔更輕量、更安全。
  3. 善用 Scripts 建立標準化的開發與建置流程。