npm 包管理器簡介

npm 簡介

npm 是 Node.js 的標準包管理器。

據報道,2022 年 9 月,npm 登錄檔中列出的包超過 210 萬個,使其成為地球上最大的單一語言程式碼倉庫,你可以確信,幾乎所有東西都有一個包!

它最初是作為一種下載和管理 Node.js 包依賴項的方式,但後來也成為前端 JavaScript 中使用的工具。

Yarnpnpm 是 npm cli 的替代品。你也可以去了解它們。

npm 負責安裝、更新和管理專案的依賴項下載。依賴項是預構建的程式碼片段,例如你的 Node.js 應用程式正常工作所需的庫和包。

安裝所有依賴項

如果專案有一個 package.json 檔案,透過執行

npm install

它將在 node_modules 資料夾中安裝專案所需的一切,如果該資料夾不存在,則會建立它。

安裝單個包

你也可以透過執行以下命令來安裝特定的包

npm install <package-name>

此外,自 npm 5 起,此命令會將 <package-name> 新增到 package.json 檔案的 dependencies 中。在版本 5 之前,你需要新增 --save 標誌。

通常你會看到此命令添加了更多標誌

  • --save-dev 安裝並將條目新增到 package.json 檔案的 devDependencies
  • --no-save 安裝但不將條目新增到 package.json 檔案的 dependencies
  • --save-optional 安裝並將條目新增到 package.json 檔案的 optionalDependencies
  • --no-optional 將阻止安裝可選依賴項

也可以使用標誌的簡寫形式

  • -S: --save
  • -D: --save-dev
  • -O: --save-optional

devDependenciesdependencies 之間的區別在於,前者包含開發工具,如測試庫,而後者則在生產環境中與應用程式捆綁在一起。

至於 optionalDependencies,其區別在於依賴項的構建失敗不會導致安裝失敗。但你的程式有責任處理依賴項缺失的情況。閱讀更多關於可選依賴項的內容。

更新包

更新也很容易,只需執行

npm update

npm 將檢查所有包是否有滿足你版本約束的更新版本。

你也可以指定更新單個包

npm update <package-name>

版本管理

除了簡單的下載,npm 還管理版本,因此你可以指定任何特定版本的包,或者要求版本高於或低於你需要的版本。

很多時候你會發現一個庫只與另一個庫的某個主版本相容。

或者一個庫最新版本中一個尚未修復的錯誤正在引發問題。

指定一個明確的庫版本也有助於讓每個人都使用完全相同的包版本,以便整個團隊執行相同的版本,直到 package.json 檔案被更新。

在所有這些情況下,版本管理都非常有幫助,npm 遵循語義化版本(semver)標準。

你可以透過執行以下命令來安裝特定版本的包

npm install <package-name>@<version>

執行任務

package.json 檔案支援一種格式,用於指定可以透過以下方式執行的命令列任務

npm run <task-name>

例如:

{
  "scripts": {
    "start-dev": "node lib/server-development",
    "start": "node lib/server-production"
  }
}

使用此功能來執行 Webpack 是非常常見的

{
  "scripts": {
    "watch": "webpack --watch --progress --colors --config webpack.conf.js",
    "dev": "webpack --progress --colors --config webpack.conf.js",
    "prod": "NODE_ENV=production webpack -p --config webpack.conf.js"
  }
}

因此,你無需輸入那些容易忘記或輸錯的長命令,而是可以執行

$ npm run watch
$ npm run dev
$ npm run prod