likes
comments
collection
share

volta工具-node版本管理工具

作者站长头像
站长
· 阅读数 2

背景

在前端团队开发,我们经常会存在多个 新旧项目 共同开发 的情况,这些项目他们依赖的node版本也不一样。项目中使用的包管理器也不一样。比如一些老的项目可能使用低版本 node 并使用 npm 安装项目依赖,而一些新的项目则会使用高版本 node 与 pnpm/yarn 来安装项目依赖。 如果node版本不统一,带来的问题就是整个项目不能运行。如果包管理器不统一,带来的就是package-lock.jsonyarn.lockpnpm-lock.yaml在每个成员电脑上都不一致的灾难 (灾难: 很多项目本地运行可以的,然而在其他人的电脑上或者线上无法正常运行,这有可能是lock文件不统一导致了安装了错误版本的依赖包)。

前言

有很多 优秀的 node的版本管理工具,例:nvm,n 等, 本文章我们根据官网的介绍讲解 volta 的使用;

volta介绍

VOLTA是一个免费的 无忧的 轻松的 JavaScript 工具管理器。管理 JavaScript 命令行工具的方式。

volta特点

  1. 快速的: 快速无缝地安装和运行任何JS工具,Volta 是在 Rust 中构建的,并作为一个时髦的静态二进制文件发布, 无缝的在每个项目的版本切换。
  2. 可靠的: 确保项目中的每个人都有相同的工具,而不会干扰他们的工作流程
  3. 跨平台: 无论是包管理器、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工具-node版本管理工具 volta工具-node版本管理工具 安装完成后volta命令还无法使用,这是因为添加到环境变量中后,还未生效,我们需要执行如下所示的命令来让其生效:

source ~/.bash_profile
  • 在windows上安装: volta工具-node版本管理工具 注意:

    第1步:在window下要启用开发人员模式, 点击 Developer Mode 链接打开的是默认微软英文网站,下方用对应的微软中文网站对照说明。 微软官网中文介绍介绍:开启方式查看:启用设备进行开发 具体开启操作: win键+s-搜索 或者 开始-设置-搜索"开发人员"-打开开发人员模式,如下图: volta工具-node版本管理工具 第2️步:下载并运行window安装程序: 点击下载安装运行👉 👉 volta-1.1.1-windows-x86_64

    第3步:使用 volta 下载node,运行命令:

        volta install node@14
    

    成功如下图: volta工具-node版本管理工具 如果无法安装node,可尝试如下操作: 如果还是错误或者卡住的话,或者因为某种原因下载不了,可尝试如下: 因为是某种原因导致直接使用终端下载不成功,直接去下载node官网版本仓库指定版本的后缀为 zip 的包,

  1. 根据自己系统下载 zip包,例如: volta工具-node版本管理工具
  2. 找到 volta 的 node 位置放入下载的zip包volta工具-node版本管理工具
  3. 执行命令安装:
volta install node@14.21.3

volta常用命令使用

命令解释
volta list all查看当前 volta 已安装的所有内容
volta install node@14.17.1安装指定版本的node
volta install node@14volta会选择node14中最新稳定的或合适的版本匹配你的请求
volta install node安装node最新的LTS最新稳定的版本
volta install npmvolta安装npm包管理器;选择node的默认版本运行
volta install yarnvolta安装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查看帮助信息

区别:

  1. 不加任何 [FLAGS] 使用 volta install node@14.17.1;有success信息输出
  2. 增加 --verbose 参数, 有 [verbose] 详细信息日志输出。
  3. 增加--quiet参数,屏蔽任何日志输出。 volta工具-node版本管理工具

[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工具-node版本管理工具

  • volta install 安装yarn

  • volta install 安装package

volta list

命令格式如:vlota list [FLAGS] [OPTIONS] [tool]: 命令运行您检查已安装的Node版本信息,运行时,软件包管理器 和 带有二进制文件的软件包。

[FLAGS]常用的有如下几种:

FLAGS命令说明
-c, --currentvolta list -cvolta list --current查看当前激活的工具内容
-d, --defaultvolta list -dvolta 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 allvolta list yarn
  • volta list all: 查看当前 volta 已安装的所有内容(包括: Node runtimes 运行时的node, Package managers:包管理工具, Packages:全局包信息) volta工具-node版本管理工具 展示的内容分为3部分:

  • Node runtimes: 已经安装的所有node版本,(default)标识的即为你当前全局使用的node版本;

  • Package managers: 已经安装的包管理工具;

  • Packages: 使用 npm install --global 安装的全局包,volta 会在这里列出,并固定其运行时的版本; volta工具-node版本管理工具

    • volta list node: 查看已安装的node版本信息 volta工具-node版本管理工具
    • volta list yarn: 查看 yarn 包管理器版本信息
  • volta list -c: 查看当前激活的工具信息 volta工具-node版本管理工具

  • volta list -d: 查看你的默认工具信息 volta工具-node版本管理工具

volta uninstall

从Volta 0.9.0开始,您还可以使用npm uninstall --globalyarn global remove

volta uninstall 命令允许您删除使用 voltall install 安装的任何全局软件包 (volta 无法删除 node 以及 包管理器)。需要进入资源目录手动删除。

[USAGE]使用命令格式: volta uninstall [FLAGS] <tool> [FLAGS]<tool> 配置参考 volta install的内容;

volta工具-node版本管理工具 使用 volta which node 命令找磁盘的安装位置,手动删除 node 或 包管理工具。 mac 上显示或隐藏-隐藏文件夹: shift + command + . 进入到 ~/.volta/tools/imagevolta工具-node版本管理工具 删除 19.9.0 的node 后: volta工具-node版本管理工具 安装全局包 和 卸载全局包: volta工具-node版本管理工具

volta which

该命令能够定位或者找到 volta 将启动的实际的二进制文件(查找到工具(node,npm,yarn,全局包等)的磁盘上安装位置); 用法: volta which node: 当前使用中的node所在的磁盘位置 volta which yarn:当前使用中的yarn所在的磁盘位置 volta which XXX(package):当前全局包所在的磁盘位置 volta工具-node版本管理工具

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工具-node版本管理工具

卸载volta

  • 在 Unix系统(MacOS)上完全卸载Volta需要两个步骤:

    • 第1步:
    rm -rf ~/.volta
    

    volta工具-node版本管理工具

    • 第2步:编辑您的shell配置文件脚本,以删除提到Volta的两行。默认情况下,Volta定位的配置文件脚本是:
      1. .bashrc
      2. .bash_profile
      3. .zshrc
      4. config.fish
      5. .profile 进行此更改后,您可能需要打开一个新的终端,因为许多shell缓存最近命令的位置
  • 在window上卸载:在Windows上,可以通过在开始>设置>应用程序的列表中选择Volta并选择卸载来卸载Volta。

项目中使用volta

要求团队统一使用 volta, 安装完 volta , 进入项目使用 volta pin 命令固定node版本。之后再进入项目,volta 会检测 package.json 中 声明的 node 版本,并自动切换到该 node 版本。

在webstorm中配置 Node

mac

volta工具-node版本管理工具

window

volta工具-node版本管理工具

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工具-node版本管理工具 全局包的执行位置同样为 ~/.volta/binvolta工具-node版本管理工具~/.volta/bin 目录下执行 ls -l 查看文件详细信息: volta工具-node版本管理工具 这些可执行的二进制文件都被使用 连接符 软连接到了 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 启用设备进行开发 爱码帮-优秀的文章