volta 优秀的项目级 Node.js 版本管理工具

邂逅 volta

volta 是一个 JavaScript 工具链管理器,用来管理 Node / npm / yarn / pnpm 等版本。 核心功能:

  • ✅ 管理 Node 版本
  • ✅ 管理 npm / yarn / pnpm 版本
  • ✅ 项目级锁定工具版本
  • ✅ 自动切换 Node 版本(不用手动切)

volta 核心命令

安装 Node

安装最新版 Node

bash
volta install node

指定版本

bash
volta install node@18
volta install node@20.10.0

安装 npm / yarn / pnpm

bash
volta install npm
volta install yarn
volta install pnpm

指定版本

bash
volta install yarn@1.22.19

⚠️ 这里和 nvm 最大不同:

Volta 会把工具版本“固定”在当前环境。

查看当前工具链

bash
volta list

项目级锁定版本(核心功能🔥) 在项目目录执行

bash
volta pin node@18

它会在 package.json 里自动添加

json
"volta": {
  "node": "18.20.4"
}

以后:

切换到这个项目目录

Volta 自动切 Node 版本

无需手动 use

这就是 Volta 牛逼的地方。

切换默认版本

bash
volta install node@20

默认就会变成最新安装的版本 Volta 没有像 nvm 那种 use 概念

卸载版本

bash
volta uninstall node@18

查看所有安装版本

bash
volta list all

volta 原理

和 nvm 最大区别:

  • nvm 原理
  • 修改 shell 环境变量
  • 改 PATH
  • 切换慢
  • 每次开新 shell 可能丢失

volta 原理 它会:

  1. 把 node 安装到:
bash
~/.volta/tools/image/node
  1. 在 PATH 前面放一个代理:
bash
~/.volta/bin
  1. 当你执行:
bash
node

实际执行的是:

bash
volta shim 判断当前目录 读取 package.json 选择正确 node 执行

属于“代理转发机制” 性能非常快

实际开发场景

场景 1:公司多个项目 Node 版本不同

项目 A:Node 16 项目 B:Node 20 只需要在各自项目里:

bash
volta pin node@16
volta pin node@20

切换目录自动生效。

场景 2:CI 保持一致

只要 package.json 有:

json
"volta": {
  "node": "18.20.4"
}

团队成员拉代码后自动统一版本。

比 .nvmrc 强很多。

和 nvm 对比

特性nvmVolta
切换版本手动 use自动
项目锁定.nvmrcpackage.json
性能较慢
Windows不友好官方支持
工具链锁定只管 nodenode + npm + yarn

高级玩法

  1. 锁定 pnpm 版本
bash
volta install pnpm@8
volta pin pnpm@8
  1. 全局安装工具(固定版本)
bash
volta install typescript
volta install eslint

这样:

  • 全局工具版本也被锁定
  • 不会污染系统
  1. 指定 Node 执行某命令
bash
volta run --node 18 node script.js

临时使用某版本

git rebase
你需要知道的JS技巧
欢迎来到前端练习生ZM的小站