Node.js 生态工具链
Node 生态真正让人容易混乱的地方,不是工具不够,而是选择太多:Node 版本管理器、包管理器、运行时、镜像、锁文件、workspace 都可能混在一起。更稳的做法是先明确“谁负责版本、谁负责装包、谁负责运行”。
推荐理解方式
- Node.js:运行时基础
- fnm / nvm / Volta / mise:版本管理
- npm / pnpm / yarn / bun:包管理与脚本入口
- Bun:既能做运行时,也能做包管理器
推荐选择顺序
- 先决定 Node 版本管理器
- 再决定包管理器
- 最后再决定项目是否真的要用 Bun 作为运行时
如果一个团队没有统一这三件事,后面几乎一定会遇到环境漂移问题。
Node.js 安装
直接安装
从 nodejs.org 下载 LTS 版本,或使用 winget:
winget install OpenJS.NodeJS.LTS
验证:
node --version
npm --version
对新机器来说,先把 LTS 跑稳通常比追最新版本更重要。
使用 fnm 管理多版本(推荐)
fnm 是一个用 Rust 编写的快速 Node.js 版本管理器。
winget install Schniz.fnm
在 $PROFILE 中添加:
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression
常用命令:
fnm install 22 # 安装指定版本
fnm use 22 # 切换版本
fnm default 22 # 设置默认版本
fnm list # 查看已安装版本
fnm list-remote # 查看可用版本
fnm 的优势是轻和快,适合个人开发机或需要频繁切换版本的场景。
使用 nvm-windows
nvm-windows 是 Windows 上经典的 Node.js 版本管理器。
# 安装
winget install CoreyButler.NVMforWindows
重启终端后使用:
nvm install 22 # 安装指定版本
nvm install lts # 安装最新 LTS
nvm use 22 # 切换版本
nvm list # 查看已安装版本
nvm list available # 查看可用版本
nvm alias default 22 # 设置默认版本
nvm uninstall 18 # 卸载指定版本
配置镜像加速:
nvm node_mirror https://npmmirror.com/mirrors/node/
nvm npm_mirror https://npmmirror.com/mirrors/npm/
fnm 和 nvm-windows 选一个即可。fnm 更快(Rust 编写),nvm-windows 更成熟、社区更大。
如果你主要在仓库级固定版本,通常更推荐进一步看 Volta 或 mise。
配置 npm 镜像
# 淘宝镜像
npm config set registry https://registry.npmmirror.com
# 恢复官方源
npm config set registry https://registry.npmjs.org
镜像可以提升安装体验,但遇到奇怪依赖问题时,也建议先切回官方源做一次验证。
pnpm 包管理器
pnpm 通过硬链接和内容寻址存储,节省磁盘空间并加速安装。
对多包仓库、前端项目和依赖量大的项目来说,pnpm 往往是最值得优先掌握的包管理器。
安装
# 通过 npm
npm install -g pnpm
# 通过 winget
winget install pnpm.pnpm
# 通过 corepack(Node.js 16.13+)
corepack enable
corepack prepare pnpm@latest --activate
常用命令
pnpm install # 安装依赖
pnpm add vue # 添加依赖
pnpm add -D typescript # 添加开发依赖
pnpm remove vue # 移除依赖
pnpm dev # 运行脚本(简写)
pnpm update --latest # 更新所有依赖到最新
pnpm dlx create-vite # 等同于 npx
与 npm 命令对照
| npm | pnpm |
|---|---|
npm install | pnpm install |
npm install pkg | pnpm add pkg |
npm uninstall pkg | pnpm remove pkg |
npm run script | pnpm script |
npx command | pnpm dlx command |
Workspace(Monorepo)
# pnpm-workspace.yaml
packages:
- "packages/*"
- "apps/*"
pnpm --filter @my/app dev # 在指定包中运行
pnpm -r run build # 在所有包中运行
workspace 是 monorepo 的核心能力之一,但前提是团队已经能稳定维护单仓库结构。
配置镜像
pnpm config set registry https://registry.npmmirror.com
Bun 运行时
Bun 是极速的 JavaScript 运行时,内置打包器、测试运行器和包管理器。
它很强,但不代表所有项目都该直接切过去。对已有 Node 项目,先把 Bun 当作包管理器或辅助工具试用,通常更稳。
安装
powershell -c "irm bun.sh/install.ps1 | iex"
验证:
bun --version
常用命令
bun init # 初始化项目
bun install # 安装依赖(比 npm 快很多)
bun add vue # 添加依赖
bun run dev # 运行脚本
bun test # 运行测试
bun build ./index.ts # 打包
为什么选择 Bun
- 启动速度极快(比 Node.js 快数倍)
- 内置 TypeScript 支持,无需额外配置
- 兼容大部分 Node.js API 和 npm 包
- 内置包管理器、打包器、测试运行器
进阶:Bun 作为包管理器
即使不用 Bun 运行代码,也可以用它替代 npm/yarn 来安装依赖:
# 在现有 Node.js 项目中使用 Bun 安装依赖
bun install
# 生成的 bun.lockb 是二进制格式,比 package-lock.json 更快
实际建议
个人开发机
- 版本管理:
fnm/Volta/mise三选一 - 包管理:优先
pnpm - 运行时:默认 Node,按需尝试 Bun
团队项目
- 仓库里明确写版本管理策略
- 固定唯一锁文件
- 不要让
npm、pnpm、bun混装同一项目依赖
常见问题
为什么一个项目会出现多个锁文件
通常是不同成员用了不同包管理器。长期看这会直接带来依赖树漂移和 CI 差异。
Bun 能不能直接替代 Node
有些项目可以,但不是默认都适合。涉及原生模块、老生态包或复杂构建链时,先验证兼容性再决定。
该选 fnm、Volta 还是 mise
- 只想轻量切 Node 版本:
fnm - 以 JS 工具链为中心:
Volta - 想统一多语言:
mise
参考链接
- Windows 重装部署清单 — 重装后的主清单入口
- Windows 重装部署清单(详情) — 逐项版本与下载链接
- Node.js 官网 — 下载与文档
- fnm GitHub — 版本管理器
- pnpm 官网 — 中文文档
- pnpm GitHub — 源码
- Bun 官网 — 文档与 API
- Bun GitHub — 源码
- npmmirror — 淘宝 npm 镜像
- Volta Node 版本管理 — 如果你更关心项目级固定工具链