volta工具-node版本管理工具
背景
在前端团队开发,我们经常会存在多个 新旧项目 共同开发 的情况,这些项目他们依赖的node版本也不一样。项目中使用的包管理器也不一样。比如一些老的项目可能使用低版本 node 并使用 npm 安装项目依赖,而一些新的项目则会使用高版本 node 与 pnpm/yarn 来安装项目依赖。
如果node版本不统一,带来的问题就是整个项目不能运行。如果包管理器不统一,带来的就是package-lock.json
、yarn.lock
、pnpm-lock.yaml
在每个成员电脑上都不一致的灾难 (灾难: 很多项目本地运行可以的,然而在其他人的电脑上或者线上无法正常运行,这有可能是lock文件不统一导致了安装了错误版本的依赖包)。
前言
有很多 优秀的 node的版本管理工具,例:nvm,n 等, 本文章我们根据官网的介绍讲解 volta 的使用;
volta介绍
VOLTA
是一个免费的 无忧的 轻松的 JavaScript 工具管理器
。管理 JavaScript 命令行工具的方式。
volta特点
- 快速的: 快速无缝地安装和运行任何JS工具,
Volta 是在 Rust 中构建的
,并作为
一个时髦的静态二进制文件发布
, 无缝的在每个项目的版本切换。 - 可靠的:
确保项目中的每个人都有相同的工具,而不会干扰他们的工作流程
。 - 跨平台:
无论是包管理器、Node运行时还是操作系统
,您只需要一个命令
:volta install
即: volta 不仅可以管理 node,也可以管理包管理工具(例:yarn),还可以管理全局包。
volta作用与优点
- 可以根据项目的
package.json
声明的 volta 配置,来根据不同的项目自动切换 node 版本。 - volta 可以直接管理 pnpm 与 yarn (不建议,建议如果使用高版本的node,后面使用 corepack 来管理包管理工具)。
- 当使用 volta 安装的 node 来执行全局安装时,切换 node 版本后,全局安装的包仍然存在,并且其运行时所依赖的 node 版本会被固定为安装包时使用的 node 版本。
安装volta
- 在 macos 与 linux 系统上安装:
curl https://get.volta.sh | bash
安装完成后
volta
命令还无法使用,这是因为添加到环境变量中后,还未生效,我们需要执行如下所示的命令来让其生效:
source ~/.bash_profile
-
在windows上安装:
注意:
第1步:在window下要启用开发人员模式,
点击 Developer Mode 链接
打开的是默认微软英文网站,下方用对应的微软中文网站对照说明。 微软官网中文介绍介绍:开启方式查看:启用设备进行开发 具体开启操作: win键+s-搜索 或者 开始-设置-搜索"开发人员"-打开开发人员模式,如下图:第2️步:下载并运行window安装程序: 点击下载安装运行👉 👉 volta-1.1.1-windows-x86_64
第3步:使用 volta 下载node,运行命令:
volta install node@14
成功如下图:
如果无法安装node,可尝试如下操作: 如果还是错误或者卡住的话,或者因为某种原因下载不了,可尝试如下: 因为是某种原因导致直接使用终端下载不成功,直接去下载node官网版本仓库指定版本的后缀为 zip 的包,
- 根据
自己系统下载
zip包
,例如: - 找到
volta 的 node 位置
,放入下载的zip包
: - 执行命令安装:
volta install node@14.21.3
volta常用命令使用
命令 | 解释 |
---|---|
volta list all | 查看当前 volta 已安装的所有内容 |
volta install node@14.17.1 | 安装指定版本的node |
volta install node@14 | volta会选择node14中最新稳定的或合适的版本匹配你的请求 |
volta install node | 安装node最新的LTS最新稳定的版本 |
volta install npm | volta安装npm包管理器;选择node的默认版本运行 |
volta install yarn | volta安装yarn包管理器;选择node的默认版本运行 |
volta pin node@14.17.1 | 固定node版本到package.json中 |
volta uninstall [FLAGS] <tool> | volta uninstall 命令允许您删除使用volta install 安装的任何全局软件包。 |
volta install
volta install 命令,将设置工具的默认版本。如果尚未在本地缓存,它也会获取该工具。该命令可以安装工具到我们的工具链上,简单理解:该命令可以安装 node 也可以安装其他包管理工具,例:yarn;
使用命令格式: volta insall [FLAGS] <tool[@version]>
[FLAGS]
配置如下:
FLAGS | 命令 | 说明 |
---|---|---|
--verbose | 例:volta install --verbose node@20.11.1 | 启用详细诊断 |
--quiet | 例: volta install --quiet node@14.17.1 | 防止不必要的输出 |
-c ,--help | 例:volta install -h | 查看帮助信息 |
区别:
- 不加任何
[FLAGS]
使用volta install node@14.17.1
;有success
信息输出
- 增加
--verbose
参数, 有[verbose]
详细信息日志输出。 - 增加
--quiet
参数,屏蔽任何日志输出。
[tool]
工具安装可选项目:
可以安装 node, yarn, 以及 package。
tool | 命令 |
---|---|
node@14.17.1 | 例如,安装14.17.1版本的node:volta install node@14.17.1 |
yarn@4.1.1 | 例如,安装4.1.1版本的 yarn:volta install yarn@4.1.1 |
your-package@^4.1.1 | 例如,安装^4.1.1版本的 全局包:volta install your-package@^4.1.1 |
使用演示:
-
volta install 安装node
volta install node@latest
: 安装最新版本node(最新版本可能不是稳定版本);volta install node
: 安装最新稳定版本(LTS)的 node;volta install node@19.9.0
: 安装指定版本的node;操作示例:
-
volta install 安装yarn
-
volta install 安装package
volta list
命令格式如:
vlota list [FLAGS] [OPTIONS] [tool]
: 命令运行您检查已安装的Node版本信息,运行时,软件包管理器 和 带有二进制文件的软件包。
[FLAGS]
常用的有如下几种:
FLAGS | 命令 | 说明 |
---|---|---|
-c , --current | volta list -c 或 volta list --current | 查看当前激活的工具内容 |
-d , --default | volta list -d 或 volta list --default | 查看当前你的默认工具 |
[OPTIONS]
配置项:用来指定或格式化输出格式:
OPTIONS | 命令 | 值 |
---|---|---|
--format | 例:volta list -c --format human | 默认值:human ;可选值:human , plain |
[ARGS]:[tool],工具的名称
我们常用 volta 来安装不同版本的 node ,但是
volta 也可以安装 不同版本的 包管理工具
,例如:yarn
tool | 命令 |
---|---|
all ,node ,yarn ,其他 | volta list all ,volta list yarn |
-
volta list all
: 查看当前 volta 已安装的所有内容(包括:Node runtimes 运行时的node
,Package managers:包管理工具
,Packages:全局包信息
)展示的内容分为3部分:
-
Node runtimes
: 已经安装的所有node版本,(default)标识的即为你当前全局使用的node版本; -
Package managers
: 已经安装的包管理工具; -
Packages
: 使用npm install --global
安装的全局包,volta 会在这里列出,并固定其运行时的版本;volta list node
: 查看已安装的node版本信息volta list yarn
: 查看 yarn 包管理器版本信息
-
volta list -c
: 查看当前激活的工具信息 -
volta list -d
: 查看你的默认工具信息
volta uninstall
从Volta 0.9.0开始,您还可以使用npm uninstall --global
或yarn global remove
volta uninstall 命令允许您删除使用 voltall install 安装的任何
全局软件包
(volta 无法删除 node 以及 包管理器)。需要进入资源目录手动删除。
[USAGE]
使用命令格式: volta uninstall [FLAGS] <tool>
[FLAGS]
和 <tool>
配置参考 volta install的内容;
使用
volta which node
命令找磁盘的安装位置,手动删除 node 或 包管理工具。
mac 上显示或隐藏-隐藏文件夹: shift + command + .
进入到 ~/.volta/tools/image
下
删除 19.9.0 的node 后:
安装全局包 和 卸载全局包:
volta which
该命令能够定位或者找到 volta 将启动的实际的二进制文件(查找到工具(node,npm,yarn,全局包等)的磁盘上安装位置);
用法:
volta which node
: 当前使用中的node所在的磁盘位置
volta which yarn
:当前使用中的yarn所在的磁盘位置
volta which XXX(package)
:当前全局包所在的磁盘位置
volta pin
volta pin 命令将更新项目的package.json文件,以使用所选版本的工具。(固定项目运行时的node或包管理工具)。
之前使用 nvm
要规范node版本的话,需要在项目根目录下创建.nvmrc
写入node版本,并要求开发人员要使用 nvm use
来对齐 当前使用的node版本,这个操作都是手动化的,如果需要自动化,就需要编写自动化脚本。
对于volta
来说,这些步骤完全是自动化的。要求团队使用 volta
之后,可以固定当前的 node 或 包管理工具,直接在项目根目录下 使用 volta pin node@20.12.1
, 会固定 node 版本,并会在 package.json
中的 volta
字段下 写入 node 版本信息。之后开发人员进入到当前项目的时候,volta 会检测 package.json 中什么的 node 信息,并且会切换至该 node 版本。
卸载volta
-
在 Unix系统(MacOS)上完全卸载Volta需要两个步骤:
- 第1步:
rm -rf ~/.volta
- 第2步:编辑您的shell配置文件脚本,以删除提到Volta的两行。默认情况下,Volta定位的配置文件脚本是:
.bashrc
.bash_profile
.zshrc
config.fish
.profile
进行此更改后,您可能需要打开一个新的终端,因为许多shell缓存最近命令的位置
-
在window上卸载:在Windows上,可以通过在开始>设置>应用程序的列表中选择Volta并选择卸载来卸载Volta。
项目中使用volta
要求团队统一使用 volta, 安装完 volta
, 进入项目使用 volta pin
命令固定node版本。之后再进入项目,volta 会检测 package.json 中 声明的 node 版本,并自动切换到该 node 版本。
在webstorm中配置 Node
mac
window
volta 对 pnpm 的支持
对pnpm
的支持目前正在实验中。要启用它,请确保环境变量VOLTA_FEATURE_PNPM
设置为1。在Windows上,这可以添加到系统设置中的用户或系统环境变量中。在Linux/Mac上,您可以在配置文件脚本中设置值(例如.bash_profile
、.zshrc
或类似)。
- 目前,不支持全局安装(例如
pnpm install -g
),将导致错误。 - 目前没有自动迁移,因此,如果您之前将
pnpm
安装为Volta全局,则需要通过调用volta install pnpm
手动重新安装它。在启用支持并重新安装之前,您可以通过volta uninstall pnpm
卸载之前安装的pnpm
软件包。一旦您切换到本机pnpm支持,您可能无法通过调用同一命令来删除隔离的旧pnpm
包,因为目前缺乏卸载实现。
volta的原理
本质上就是通过 覆写二进制文件的执行命令 到 volta 的处理程序中,然后 volta 就可以调用正确的 node 版本,或者,调用全局安装的二进制文件并为其制定 node 版本。
我们通过 which node
查看下 node 的执行位置。
全局包的执行位置同样为
~/.volta/bin
下
在
~/.volta/bin
目录下执行 ls -l
查看文件详细信息:
这些可执行的二进制文件都被使用 连接符 软连接到了
volta-shim
这个可执行文件上了。
背后的原因: 当使用volta时,npm,node,yarn以及全局包的二进制文件被重定向到 ~/.volta/bin
目录下的对应可执行文件,而这些可执行文件都是 ~/.volta/bin/volta-shim
所创建的软连接。
volta-shim
是一个特殊的脚步, 它做了
- 如果是node,npm,yarn等命令,检测当前工作空间是否被
volta pin
指定了node版本 和包管理器,如果是的话则重定向到目标版本。 - 如果是全局包,有npm,yarn安装的可执行文件,则定向到该可执行文件,并且使用安装该可执行文件时的node版本来执行该指令。
拓展:Node corepack
corepack 是 node官方出的一个管理 node 包管理器的管理器工具 是未来
,使用 corepack
已经 被 node 官方视为一个 规范
, 已经集成在 node 的最新发行 版本中,目前完整的支持 yarn 和 pnpm 切换,yarn 和 pnpm 在初始化项目的时候也会 将 packageManager
写入到 package.json
中, corepack 必定是一个趋势,所以对于包管理器的管理来说,应当尽量使用 corepack 而非 volta。
参考
VOLTA -- The Hassle-Free JavaScript Tool Manager GitHub:VOLTA 启用设备进行开发 爱码帮-优秀的文章
转载自:https://juejin.cn/post/7354004824305926154