包管理工具

包管理工具

在面对多项目开发时,包管理工具是协助我们快速切换不同项目包环境的利器,常用的有 nvm, 今天在新纪录一种更好用的 volta

volta

简介

Volta 是一个JavaScript 工具管理器。它的核心目标是让您的 JavaScript 命令行工具的版本管理变得无缝、高效,并且基于每个项目进行隔离。

您可以把它理解为 Node.js 版本管理工具(如 nvm)和包管理器(如 npm/Yarn)的智能结合与增强。它不仅能管理 Node.js 的版本,还能管理像 npm、yarn、pnpm 这样的包管理器本身,以及通过这些包管理器全局安装的任何命令行工具(例如 vue-cli、create-react-app、nodemon 等)。

  1. 速度优先: Volta 的构建非常注重性能。一旦工具版本被缓存,后续的切换和使用几乎是瞬间完成的。

  2. 无缝切换: 您不需要手动运行类似 nvm use 的命令。当您在项目目录中时,Volta 会自动切换到该项目所指定的 Node 等工具版本。

  3. 跨平台支持: 它原生支持 Windows、macOS 和 Linux,提供一致的体验。

  4. 稳定的工具链: 通过将工具版本锁定在项目中,确保了团队所有成员以及构建服务器使用完全一致的环境,避免了“在我机器上是好的”这类问题。

Volta 的主要功能

  1. 管理 Node.js 版本
1
2
3
4
5
6
7
8
9

# 安装最新的 LTS 版本的 Node.js
volta install node@lts

# 安装一个特定的版本
volta install node@16.14.0

# 查看当前使用的 Node.js 版本
node --version
  1. 管理包管理器版本(npm, Yarn, pnpm)
1
2
3
4
5
6
7
8
9

# 安装并使用特定版本的 npm
volta install npm@8.5.0

# 安装并使用特定版本的 Yarn
volta install yarn@1.22.0

# 查看当前使用的 npm 版本
npm --version
  1. 管理全局包(全局命令行工具)

当您使用 npm install -g 或 yarn global add 安装全局包时,Volta 会自动将这些工具“固定”到当前的 Node.js 版本。这意味着当您切换 Node.js 版本时,这些全局工具不会发生冲突或出现兼容性问题。

  1. 项目级别的版本锁定(核心功能)

这是 Volta 最强大的功能。您可以在项目中“固定”所需的工具版本。这个信息会保存在项目的 package.json 文件中。

操作流程:

进入您的项目目录。

使用 volta pin 命令来锁定版本。

1
2
3
4
5
6
# 进入项目目录
cd /path/to/my-project

# 将当前项目的 Node 版本固定为 18.12.1,npm 版本固定为 8.19.2
volta pin node@18.12.1
volta pin npm@8.19.2

执行后,您的 package.json 文件中会自动添加一个 volta 字段:

1
2
3
4
5
6
7
8
9
10
11

{
"name": "my-project",
"dependencies": {
...
},
"volta": {
"node": "18.12.1",
"npm": "8.19.2"
}
}

这个 volta 字段的神奇之处在于:

  • 自动切换: 当任何开发者(只要他安装了 Volta)进入这个项目目录时,他的命令行环境会自动切换到 Node.js 18.12.1 和 npm 8.19.2,无需任何手动命令。

  • 保证一致性: 无论是开发、调试还是 CI/CD 流水线(只要 CI 环境安装了 Volta),使用的工具版本都是完全一致的,从根本上杜绝了环境差异导致的问题。

Volta 与 nvm 的详细对比

特性 Volta nvm (Node Version Manager)
自动切换 自动。基于项目目录自动切换,无需手动命令。 手动。需要运行 nvm use 命令。
跨平台 优秀。Windows、macOS、Linux 原生支持。 一般。在 macOS/Linux 上很好,Windows 需要 nvm-windows,但非官方且功能有差异。
性能 极快。采用 Rust 编写,版本切换是瞬间完成的。 较快。但涉及修改环境变量,有时新开终端需要重新 nvm use
包管理器管理 内置支持。可以直接管理 npm、Yarn、pnpm 的版本。 不直接支持。npm 版本通常随 Node 版本绑定,管理其他包管理器较麻烦。
全局包管理 智能隔离。全局包与 Node 版本绑定,切换版本时互不干扰。 共享或隔离。默认全局包在不同 Node 版本间是隔离的,但管理起来相对笨重。
项目配置 标准化。通过 package.json 配置,与项目代码一起版本控制。 非标准化。通常需要额外文件如 .nvmrc,或依赖开发者的手动操作。

如何安装使用Volta

在 macOS 和 Linux 上,使用官方安装脚本:

1
2

curl https://get.volta.sh | bash

安装完成后,重新启动您的终端。

在 Windows 上,可以通过 Scoop 安装:

1
scoop install volta

基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 查看 Volta 帮助
volta --help

# 安装一个 Node.js 版本
volta install node@lts
volta install node@latest

# 列出所有已安装的工具链版本
volta list all

# 查看当前正在使用的工具版本
volta which node
volta which npm

# 在项目中固定版本
cd my-project
volta pin node@16.14.0
volta pin yarn@1.22.0

总结

Volta 是现代 JavaScript 开发的强大工具,特别适合团队协作和追求开发环境一致性的场景。

如果您是个人开发者,Volta 可以提供一种更简单、更快速的方式来管理您的开发环境。

如果您是团队一员,强烈推荐使用 Volta。通过在项目的 package.json 中设置 volta 字段,您可以确保每位新成员在克隆项目后,能立即获得正确配置的环境,极大降低上手门槛和环境配置带来的麻烦。

总而言之,Volta 通过其自动、快速、一致的特性,极大地改善了 JavaScript 开发者的工具链管理体验。

nvm

这个网络上教程很多,暂不列出,可自行搜索

走过路过,留下买路财,壮士