---
# System prepended metadata

title: Node.js 與 npm 版本管理問題與解決方案
tags: [TPI-TPIU]

---

star:: 5
relation:: [[2024-10-02]] [hackmd↗](https://hackmd.io/@VxulnppPQHuOEDANOU92EQ/rJ2rtH5AA)

# Node.js 與 npm 版本管理問題與解決方案
- This article is the original draft, published at [[TPIU 昕力大學]][↗](https://www.tpisoftware.com/tpu/articleDetails/3126).
## 簡介
- 本文探討 Node.js 與 npm 版本管理的常見問題，並提供解決方案，包括使用 nvm、Volta、本地安裝 npm 及 Docker 虛擬化環境。
## 遇到的問題
- 在多個專案開發時，Node.js 和 npm 版本管理常常成為瓶頸，尤其在舊專案無法支援新版本時。具體問題包括：
 - 舊專案不相容於最新的 Node.js 版本。
 - Node.js 和 npm 版本不一致導致的依賴衝突。
 - 頻繁切換環境變數，導致效率低下。
## 解決方向
- 如何在不同專案間快速切換 Node.js 和 npm 版本？
- 如何為每個專案提供獨立環境，避免版本衝突？
- 是否有工具能自動切換版本，提升開發效率？
## 解決的方案
	### 方案 1：使用 nvm 自動化管理 Node.js 和 npm
 - `nvm` 是一個多版本 Node.js 管理工具，可以輕鬆切換 Node.js 版本，但需手動控制 npm 版本。
		  1. 安裝所需 Node.js 版本：
		     ```bash
		     nvm install 12.18.3
		     ```
		  2. 切換至專案需要的 Node.js 版本：
		     ```bash
		     nvm use 12.18.3
		     ```
		  3. 手動調整 npm 版本：
		     ```bash
		     npm install -g npm@6.14.8
		     ```
		  4. 自動化：建立 `.nvmrc` 文件，自動切換 Node.js 版本。
 - 優點：
	 - 操作簡單，支援多個專案的版本管理。
 - 缺點：
	 - npm 版本需手動切換。
	### 方案 2：本地安裝 npm 並使用 npx 執行
 - 本地安裝 npm 避免全局版本影響專案，並使用 `npx` 運行本地 npm。
		  1. 本地安裝所需 npm 版本：
		     ```bash
		     npm install npm@6.14.8 --save-dev
		     ```
		  2. 使用 `npx` 執行本地 npm：
		     ```bash
		     npx npm install
		     ```
 - 優點：
	 - 避免全局 npm 版本干擾，適合多專案開發。
 - 缺點：
	 - 手動運行 `npx`，需要一定空間。
	### 方案 3：使用 Volta 自動化管理 Node.js 和 npm
 - `Volta` 能自動切換 Node.js 和 npm，適合需要快速切換環境的專案。
		  1. 安裝 Volta：
		     ```bash
		     curl https://get.volta.sh | bash
		     ```
		  2. 安裝指定 Node.js 和 npm 版本：
		     ```bash
		     volta install node@12.18.3
		     volta install npm@6.14.8
		     ```
 - 優點：
	 - 自動切換，無需手動干預。
 - 缺點：
	 - 需額外學習成本。
	### 方案 4：使用 Docker 虛擬化環境
 - 使用 Docker 完全隔離專案的運行環境，避免系統與專案版本衝突。
		  1. 創建 `Dockerfile` 定義 Node.js 版本：
		     ```dockerfile
		     FROM node:12.18.3
		     WORKDIR /app
		     COPY package*.json ./
		     RUN npm install
		     COPY . .
		     CMD ["npm", "start"]
		     ```
		  2. 使用 Docker 運行專案：
		     ```bash
		     docker build -t myapp .
		     docker run -p 3000:3000 myapp
		     ```
 - 優點：
	 - 完全隔離，適合團隊合作和部署。
 - 缺點：
	 - 配置與資源成本高。
## 實作 - 以 Google IDX 搭配 Docker 方案實現依專案客制開發環境
## 總結
- `nvm` 適合輕量、頻繁切換版本的開發者。
- `Volta` 自動化切換適合長期專案與多專案開發。
- Docker 提供隔離環境，是大型專案最佳選擇。
- 本地安裝 npm 並使用 `npx` 適合短期需求。
## 各方案分析
  | 方案 | 適用場景 | 學習成本 | 切換速度 | 資源消耗 | 推薦使用時間 |
  |---|---|---|---|---|---|
  | nvm | 單專案開發，需經常切換版本 | 低 | 快 | 低 | 短期開發或小型專案 |
  | 本地 npm + npx | 多專案切換，不影響全局 | 中 | 快 | 低 | 長期開發，版本差異大 |
  | Volta | 頻繁切換、自動化 | 中 | 快 | 低 | 長期開發，多專案並行 |
  | Docker | 環境隔離，團隊合作 | 高 | 中 | 高 | 大型或複雜專案 |
## 參考來源
- [Docker 實戰指南↗](https://5xcampus.com/courses/docker.html?srsltid=AfmBOooo835EEd_759r9U4ut1zWW0U44-ofpKctUPn_Tt9ufU0sjFvQs)
- [Docker Documentation↗](https://docs.docker.com/)
- [npx: A Tool for Running npm Package Binaries↗](https://www.npmjs.com/package/npx)
- [Node.js WIKI↗](https://zh.wikipedia.org/zh-tw/Node.js)
## 延申閱讀
- 使用 Docker Compose 摻在一起做懶人包: https://ithelp.ithome.com.tw/articles/10243618
- [實作筆記] 如何更無痛更新專案中的 npm 相依套件: https://blog.marsen.me/2022/09/08/2022/how_to_npm_update_more_smoothly/
- nodejs 專案之間自動切換版本的好用工具 – volta: https://www.pigo.idv.tw/archives/3410
- nvm：安裝、切換不同 Node.js 版本的管理器: https://titangene.github.io/article/nvm.html
## 外部連結
- [Volta Official Website↗](https://volta.sh/)
- [nvm GitHub Repository↗](https://github.com/nvm-sh/nvm)
- [[@Winny/Topic/Node js 與 npm 版本衝突問題討論]][↗](https://gist.github.com/wanyutang/f189b01142464ed421c593421cddf690)
- [[Winny Post]][↗](https://hackmd.io/@VxulnppPQHuOEDANOU92EQ/SymfrcyRA/%2F9lUXmZYKRhig-39DjG9Fgg)