【前端篇】Node.js 版本管理新选择:Volta,让版本切换更简单

ops/2024/11/17 23:11:29/

一、概述

前端项目开发中,Node.js 版本管理是一个不可或缺的环节。许多人可能正在使用 nvm 来管理不同项目的 Node.js 版本。然而,当项目数量增多,且每个项目对 Node.js 版本的要求各异时,手动管理版本就会变得异常繁琐。今天,我们来介绍一个新工具——Volta,它不仅提供了极速的版本切换体验,还能自动管理项目的 Node.js 版本依赖,极大降低了使用过程中的心智负担,被誉为 Node.js 版本管理的终极解决方案。

二、背景

面对多个项目对 Node.js 版本不同需求的情况,我们通常会在项目的 package.json 文件的 engines 字段中声明所需版本,并使用 nvm 管理不同版本的 Node.js 实例。在项目数量较少时,这种方法是可行的。但随着团队规模的扩大,面对数十个需要维护的项目时,手动查找、切换、安装版本将变得非常麻烦。Volta 正是为了解决这一问题而诞生的!

三、Volta 特性

以下是从 Volta 官方文档中摘录的一些特性:

官方文档:Introduction | Volta

  • 高速无缝、按项目切换版本
  • 跨平台支持,包括 Windows 和所有 Unix shell
  • 支持多个软件包管理器
  • 稳定的工具安装,无需在每次 Node 升级时重新安装
  • 可扩展性钩子,用于特定站点的定制化
  • 采用 Rust 编写,性能强悍

使用 Volta,你可以为项目选择一个 Node 版本,之后无需再关心版本问题,甚至可以在不同项目目录间自由切换,无需手动切换 Node 版本。

四、迁移指南

1、安装 Volta

Volta 是跨平台的,不同操作系统的用户可以选择不同的安装方式:

  • Unix-like (Mac/Linux): 通过命令安装。
curl https://get.volta.sh | bash
  • Windows: 可以使用 winget 安装,或者下载安装包自行安装。
winget install Volta.Volta

2、基本使用

进入项目根目录,执行 volta pin node@version 命令,Volta 会在 package.json 中新增配置。将这些变更提交至 Git 仓库,其他协作者就可以自动使用指定的 Node 版本了。

3、集成 PNPM

Volta 对 pnpm 的支持目前是实验性的,但可以通过设置环境变量 VOLTA_FEATURE_PNPM=1 来启用。这样,你就可以像管理 Node 版本一样管理 pnpm 版本了。

pnpm Support | Volta

4、配置环境变量

  • Mac 系统:在 shell 配置文件中新增一行 export VOLTA_FEATURE_PNPM=1
  • Windows:在系统环境变量管理中新增 VOLTA_FEATURE_PNPM 变量,值为 1。

随后就可以像 pin Node 版本一样,在不同项目中固定不同的 pnpm 版本了

以 Mac 及 ZSH 为例:

code ~/.zshrc# 新增代码:
# 手动开启volta的PNPM支持
export VOLTA_FEATURE_PNPM=1

5、卸载 PNPM 和其他工具

卸载 pnpm | pnpm

如果之前通过独立脚本安装了 pnpm,可以直接删除 pnpm 的主目录。

rm -rf $PNPM_HOME

如果使用 npm 安装了 pnpm,则应使用 npm 卸载 pnpm。

npm rm -g pnpm

6、安装全局工具

对于全局工具,如 Whistle,需要在卸载 pnpm 后重新使用 npm 安装。

如果类似 Whistle 等的全局工具是使用自行安装的 pnpm 管理的,则应在卸载 pnpm 后自行重新使用 npm 来安装

  • 卸载 pnpm 之前,使用pnpm list --global列出当前安装的全局包

  • 卸载后,使用npm add --global <packageName>逐个安装即可

7、移除 nvm

如果之前安装了 nvm 等其他版本管理工具,为了避免冲突,需要手动移除。例如,卸载 nvm 的步骤如下:

  • 首先,使用nvm unload从终端中删除nvm命令并删除安装目录:
nvm_dir="${NVM_DIR:-~/.nvm}"
nvm unload
rm -rf "$nvm_dir"
  • 编辑~/.bashrc(或其他 shell 资源配置)并删除以下行:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[[ -r $NVM_DIR/bash_completion ]] && \. $NVM_DIR/bash_completion

五、常见问题解答

  • Q:不同的目录和终端都能自动切换吗?

    • A:是的,Volta 会在进入项目目录后自动读取项目中声明的版本并主动切换。
  • Q:项目维护者没有安装 Volta 怎么办?

    • A:他们可以回退到手动查看项目的 engines 字段并切换版本的方式。
  • Q:项目中声明了本地未下载的 Node 版本会怎样?

    • A:Volta 会在执行 Node 相关命令时自动下载并使用该版本。
  • Q:全局移除了其他来源的 Node,遇到没有 Volta 声明的文件夹怎么办?

    • A:使用 volta install node@version 命令安装全局版本。
    • 使用 install 子命令安装一个全局版本,例如:
volta install node@20
node -v # v20.18.0

Volta 的确是一个强大的工具,可以帮助开发者更高效地管理不同项目的 Node.js 版本,减少版本冲突和手动切换的麻烦。如果你想了解更多关于 Volta 的信息,可以访问其官方文档。


http://www.ppmy.cn/ops/134560.html

相关文章

如何基于Tesseract实现图片的文本识别

在前一篇文章基础上&#xff0c;如何将报告图片中的文本解析出来&#xff0c;最近研究了基于Tesseract的OCR方案&#xff0c;Tesseract OCR是一个开源的OCR引擎&#xff0c;主要结合开源的tesseract和pytesseract&#xff0c;实现了jpg/png等格式图片文本识别&#xff0c;供大家…

二分查找算法

目录 二分查找算法 题目1——704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 1.1.暴力解法 1.2.二分查找算法 1.3.朴素的二分查找算法模板 题目2——34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 2.1.暴力解法 2.2.…

Python爬虫下载新闻,Flask展现新闻(2)

上篇讲了用Python从新闻网站上下载新闻&#xff0c;本篇讲用Flask展现新闻。关于Flask安装网上好多教程&#xff0c;不赘述。下面主要讲 HTML-Flask-数据 的关系。 简洁版 如图&#xff0c;页面简单&#xff0c;主要显示新闻标题。 分页&#xff0c;使用最简单的分页技术&…

C# yolo10使用onnx推理

一、前言 本篇总结C#端使用yolo10的onnx文件做模型推理&#xff0c;主要使用Microsoft.ML.OnnxRuntime.Gpu这个库。需要注意的是Microsoft.ML.OnnxRuntime 和 Microsoft.ML.OnnxRuntime.Gpu 这2库只装1个就行&#xff0c;CPU就装前者&#xff0c;反之后者。然后需要注意系统安装…

大数据治理:从概念到实践的旅程

大数据治理&#xff1a;从概念到实践的旅程 在这个数字化飞速发展的时代&#xff0c;数据如同石油一样成为了推动社会进步的重要资源。大数据治理&#xff0c;作为管理这一宝贵资源的关键实践&#xff0c;其重要性日益凸显。它不仅关乎数据的准确性、一致性和可靠性&#xff0…

Ollama—87.4k star 的开源大模型服务框架!!

这一年来&#xff0c;AI 发展的越来越快&#xff0c;大模型使用的门槛也越来越低&#xff0c;每个人都可以在自己的本地运行大模型。今天再给大家介绍一个最厉害的开源大模型服务框架——ollama。 项目介绍 Ollama 是一个开源的大语言模型&#xff08;LLM&#xff09;服务工具…

【H3C华三 】VRRP与BFD、Track联动配置案例

原创 厦门微思网络 组网需求 如图1所示&#xff0c;区域A和区域B用户所在网络的出口处部署了两台汇聚层设备&#xff08;Device A和Device B&#xff09;。 现要求使用VRRP与BFD、Track联动功能&#xff0c;实现以下需求&#xff1a; • 在Device A和Device B上分别配置两个…

【机器学习】特征工程、降维与超参数调优:提升机器学习模型表现的三大核心技术

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…