Skip to content

在项目之间切换

Volta 的主要优势之一是它无缝处理不同项目中的不同工具版本。本页面解释了当您在项目之间移动时,Volta 如何自动管理您的 JavaScript 环境。

自动版本切换

与其他需要您手动在工具版本之间切换的版本管理器不同,Volta 根据您当前的目录自动处理这一点。

工作原理

  1. 当您运行 JavaScript 命令(如 nodenpm 或包二进制文件)时,Volta 的垫片拦截命令
  2. Volta 检查您当前的目录,看看您是否在具有固定工具版本的项目中
  3. 如果是,Volta 使用该项目 package.json 中的固定版本
  4. 如果您不在具有固定版本的项目中,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. 本地包

当您运行包二进制文件时:

  1. 如果二进制文件存在于项目的 node_modules/.bin/ 中,Volta 使用该版本
  2. 如果不存在,但包通过 Volta 全局安装,它使用该版本
  3. 否则,它显示找不到命令的错误

故障排除

如果您在版本切换时遇到问题:

  • 验证您的项目在其 package.json 中有 volta 部分
  • 运行 volta list all 检查您已安装的工具
  • 检查您需要的工具是否固定到您的项目或作为默认版本安装
  • 运行 volta which node 查看 Volta 正在使用哪个版本的 Node.js 以及原因