在 Node.js 的生態系中,npm 和 nvm 是兩個非常重要的工具。npm 是套件管理器,而 nvm 是 Node.js 版本管理器。

什麼是 npm

npm 全名是 Node Package Manager,是 Node.js 的套件管理器。它讓開發者可以輕鬆地安裝、更新、移除和管理 JavaScript 套件。

npm 的主要功能

  1. 套件安裝:安裝第三方套件
  2. 依賴管理:管理專案的依賴關係
  3. 腳本執行:執行自定義的腳本命令
  4. 版本管理:管理套件的版本

npm 基本命令

初始化專案

# 建立新的 package.json 檔案
npm init

# 使用預設設定快速初始化
npm init -y

安裝套件

# 安裝套件並加入 dependencies
npm install <package-name>
npm i <package-name>

# 安裝套件並加入 devDependencies
npm install <package-name> --save-dev
npm i <package-name> -D

# 全域安裝套件
npm install <package-name> --global
npm i <package-name> -g

# 安裝特定版本的套件
npm install <package-name>@<version>

移除套件

# 移除套件
npm uninstall <package-name>
npm remove <package-name>

# 移除全域套件
npm uninstall <package-name> --global

更新套件

# 更新所有套件
npm update

# 更新特定套件
npm update <package-name>

# 檢查過期的套件
npm outdated

其他實用命令

# 查看已安裝的套件
npm list
npm ls

# 查看套件資訊
npm info <package-name>

# 執行 package.json 中定義的腳本
npm run <script-name>

# 清除 npm 快取
npm cache clean --force

package.json 檔案

package.json 是專案的配置檔案,包含了專案的基本資訊和依賴管理:

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "我的專案描述",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js",
    "test": "jest",
    "build": "webpack"
  },
  "dependencies": {
    "express": "^4.18.0",
    "lodash": "^4.17.21"
  },
  "devDependencies": {
    "nodemon": "^2.0.15",
    "jest": "^28.0.0"
  },
  "keywords": ["javascript", "node"],
  "author": "Your Name",
  "license": "MIT"
}

什麼是 nvm

nvm 全名是 Node Version Manager,是 Node.js 的版本管理器。它讓開發者可以在同一台電腦上安裝和切換不同版本的 Node.js。

為什麼需要 nvm

  1. 多版本需求:不同專案可能需要不同版本的 Node.js
  2. 版本測試:測試程式在不同 Node.js 版本下的相容性
  3. 升級安全:可以安全地升級或降級 Node.js 版本

nvm 安裝

macOS/Linux

# 使用 curl 安裝
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

# 或使用 wget 安裝
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

# 重新載入終端機設定
source ~/.bashrc

Windows

Windows 使用者可以安裝 nvm-windows:

  1. nvm-windows GitHub 下載安裝包
  2. 執行安裝程式

nvm 基本命令

# 查看 nvm 版本
nvm --version

# 列出所有可安裝的 Node.js 版本
nvm list-remote
nvm ls-remote

# 列出已安裝的 Node.js 版本
nvm list
nvm ls

# 安裝最新版本的 Node.js
nvm install node

# 安裝特定版本的 Node.js
nvm install 16.18.0

# 安裝最新的 LTS 版本
nvm install --lts

# 切換到特定版本
nvm use 16.18.0

# 設定預設版本
nvm alias default 16.18.0

# 查看目前使用的版本
nvm current

# 移除特定版本
nvm uninstall 14.20.0

實際使用場景

專案 A 使用 Node.js 16

cd project-a
nvm use 16
npm install
npm start

專案 B 使用 Node.js 18

cd project-b
nvm use 18
npm install
npm start

使用 .nvmrc 檔案

在專案根目錄建立 .nvmrc 檔案:

16.18.0

然後在專案目錄執行:

nvm use
# 自動切換到 .nvmrc 指定的版本

npm vs yarn

除了 npm,還有其他套件管理器如 yarn:

特性 npm yarn
安裝速度 較慢 較快
離線安裝 支援 支援
鎖定檔案 package-lock.json yarn.lock
安全性 良好 良好

最佳實務

  1. 使用 .nvmrc:為每個專案指定 Node.js 版本
  2. 鎖定版本:提交 package-lock.json 到版本控制
  3. 定期更新:定期檢查和更新套件版本
  4. 區分依賴:正確區分 dependencies 和 devDependencies
  5. 使用 npm audit:定期檢查安全性漏洞
# 檢查安全性漏洞
npm audit

# 自動修復漏洞
npm audit fix