在项目之间切换
Volta 的主要优势之一是它无缝处理不同项目中的不同工具版本。本页面解释了当您在项目之间移动时,Volta 如何自动管理您的 JavaScript 环境。
自动版本切换
与其他需要您手动在工具版本之间切换的版本管理器不同,Volta 根据您当前的目录自动处理这一点。
工作原理
- 当您运行 JavaScript 命令(如
node
、npm
或包二进制文件)时,Volta 的垫片拦截命令 - Volta 检查您当前的目录,看看您是否在具有固定工具版本的项目中
- 如果是,Volta 使用该项目
package.json
中的固定版本 - 如果您不在具有固定版本的项目中,Volta 使用您的默认工具
所有这些都是透明发生的,无需任何额外命令。
示例工作流程
想象您有两个具有不同 Node.js 要求的项目:
项目 A(~/projects/project-a/package.json
):
json
{
"volta": {
"node": "14.19.1",
"npm": "6.14.16"
}
}
项目 B(~/projects/project-b/package.json
):
json
{
"volta": {
"node": "16.14.2",
"npm": "8.5.0"
}
}
您的工作流程可能是这样的:
bash
# 在项目 A 中
cd ~/projects/project-a
node --version # 显示 v14.19.1
npm --version # 显示 v6.14.16
# 切换到项目 B
cd ~/projects/project-b
node --version # 自动显示 v16.14.2
npm --version # 自动显示 v8.5.0
# 在任何项目之外
cd ~
node --version # 显示您的默认 Node 版本
嵌套项目
如果您有嵌套项目,Volta 将使用最近的具有 volta
部分的 package.json
中的工具版本。
例如:
/parent-project/package.json(具有 volta 部分,node@14)
/parent-project/child-project/package.json(具有 volta 部分,node@16)
/parent-project/other-directory/(没有 package.json)
如果您在以下位置运行命令:
/parent-project/child-project/
- Volta 使用 Node.js 16/parent-project/other-directory/
- Volta 使用 Node.js 14/parent-project/
- Volta 使用 Node.js 14
包二进制文件
Volta 的自动切换也适用于包二进制文件。例如,如果您有项目特定版本的 TypeScript 并运行 tsc
,Volta 确保使用正确的版本。
全局 vs. 本地包
当您运行包二进制文件时:
- 如果二进制文件存在于项目的
node_modules/.bin/
中,Volta 使用该版本 - 如果不存在,但包通过 Volta 全局安装,它使用该版本
- 否则,它显示找不到命令的错误
故障排除
如果您在版本切换时遇到问题:
- 验证您的项目在其
package.json
中有volta
部分 - 运行
volta list all
检查您已安装的工具 - 检查您需要的工具是否固定到您的项目或作为默认版本安装
- 运行
volta which node
查看 Volta 正在使用哪个版本的 Node.js 以及原因