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

一、概述

在前端项目开发中,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.xdnf.cn/news/14742.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

小试银河麒麟系统OCR软件

0 前言 今天在国产电脑上办公&#xff0c;需要从一些PDF文件中复制文字内容&#xff0c;但是这些PDF文件是图片转换生成的&#xff0c;不支持文字选择和复制&#xff0c;除了手工输入&#xff0c;我们还可以使用OCR。 1 什么是OCR OCR &#xff08;Optical Character Recogni…

np.zeros_like奇怪的bug

import numpy as np aa np.array([[1,2,3],[2,3,3]]) cc np.random.randn(2,3) print(aa) print(cc)bb np.zeros_like(aa) print(bb)for i in range(bb.shape[0]):for j in range(bb.shape[1]):bb[i,j] cc[i,j]print(bb)结果如下 这里发现这个bb的结果是没有赋值的 正确做…

C++(Qt)软件调试---内存泄漏分析工具MTuner (25)

C(Qt)软件调试—内存泄漏分析工具MTuner &#xff08;25&#xff09; 文章目录 C(Qt)软件调试---内存泄漏分析工具MTuner &#xff08;25&#xff09;[toc]1、概述&#x1f41c;2、下载MTuner&#x1fab2;3、使用MTuner分析qt程序内存泄漏&#x1f9a7;4、相关地址&#x1f41…

apk反编译修改教程系列-----apk应用反编译中AndroidManifest.xml详细代码释义解析 包含各种权限 代码含义

在反编译apk应用中。需要增加或者减少有些apk功能或者权限类的修改。其中大多都在于 AndroidManifest.xml文件中。了解AndroidManifest.xml其中每串代码代表的含义对修改apk有着至关重要的作用。 通过博文了解💝💝💝💝 1💝💝💝💝----AndroidManifest.xml中代…

项目功能--运营数据统计

一、需求分析 通过运营数据统计可以展示出体检机构的运营情况&#xff0c;包括会员数据、预约到诊数据、热门套餐等信息。我们要通过一个表格的形式来展示这些运营数据。如下图&#xff1a; 二、代码实现 实现步骤&#xff1a; 步骤一&#xff1a;定义数据模型&#xff0c;通过…

电子制造行业Top5贴片机品牌

在电子制造业的快速发展中&#xff0c;SMT&#xff08;Surface Mount Technology&#xff09;表面贴装技术扮演着至关重要的角色。贴片机作为SMT生产线的核心设备&#xff0c;其性能直接关系到整个生产线的效率和产品质量。 SPEA作为全球领先的自动化测试设备服务商&#xff0…

【maven踩坑】一个坑 junit报错 但真正导致这个的不是junit的原因

目录 事件起因环境和工具操作过程解决办法结束语 事件起因 报错一&#xff1a; Internal Error occurred. org.junit.platform.commons.JUnitException: TestEngine with ID junit-vintage failed to discover tests报错二&#xff1a; Internal Error occurred. org.junit.pl…

拷贝和浅拷贝的区别,以及对于循环引用如何处理深拷贝

深拷贝和浅拷贝的区别&#xff0c;以及对于循环引用如何处理深拷贝 浅拷贝仅拷贝对象的第一层属性值&#xff0c;对于基本数据类型&#xff0c;会复制其值&#xff1b;对于引用数据类型&#xff0c;仅复制引用地址而不复制实际的对象内容。浅拷贝后的新对象与原对象中的引用类…

gitlab与jenkins

一 gitlab代码仓库 1.1 gitlab简介 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用 Git 作为代码管理工具&#xff0c;并在此基础上搭建起来的 web 服务。GitLab 具有很多功能&#xff0c;比如代码托管、持续集成和持续部署&#xff08;CI/CD&#xff09;、问题跟踪…

LeetCode 86.分隔链表

题目&#xff1a; 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 思路&#xff1a; 代码&#xff1a; /*** Definiti…

Qt/C++ 开源控件 可折叠的标签管理控件

在 Qt 开发中&#xff0c;许多项目需要处理标签管理功能&#xff0c;例如分类管理、标签筛选等需求。本文将分享如何利用 Qt/C 实现一个具备动态增删标签、展开折叠功能的控件。此控件由 TagWindow 和 TagItemWidget 两个类组成&#xff0c;前者负责整个标签管理窗口的布局与逻…

Jmeter中的监听器(三)

9--断言结果 功能特点 显示断言结果&#xff1a;列出所有断言的结果&#xff0c;包括通过和失败的断言。详细信息&#xff1a;显示每个断言的详细信息&#xff0c;如断言类型、实际结果和期望结果。错误信息&#xff1a;显示断言失败时的错误信息&#xff0c;帮助调试。颜色编…

七牛云上传图片成功,但是无法访问显示{error : document not found}

上传图片成功&#xff0c;但是访问不了的问题&#xff0c;直接把地址放进浏览器显示{error : document not found}&#xff0c;直接访问 DCNF 404是符合预期的&#xff0c;因为还没有去空间复制外链&#xff0c;要访问实际存在的资源才可以的. 配置区域和访问域名 设置没问题了…

虚拟与现实交融,线上元宇宙会议应用场景有哪些?

随着科技的飞速发展&#xff0c;元宇宙技术正逐渐渗透到我们生活的各个领域&#xff0c;为企业会议、学术会议、行业展会以及文化娱乐等带来了前所未有的变革。线上元宇宙会议打破了地域和物理空间的限制&#xff0c;让人们能够在虚拟世界中实现跨时空的交互与合作。本文将深入…

构建高效在线商店:Spring Boot框架应用

1 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的大环境让那些止步不前&#…

鸿蒙网络编程系列47-仓颉版UDP客户端

1. UDP通讯简介 本系列的第1篇文章《鸿蒙网络编程系列1-UDP通讯示例》中基于ArkTS语言在API 9的环境下演示了UDP通讯的基础用法&#xff0c;本文将使用仓颉语言在API 12的环境中实现类似的功能。这可能听起来有点不太现实&#xff0c;在ArkTS语言下可以利用kit.NetworkKit下的…

Redis与IO多路复用

1. Redis与IO多路复用概述 1.1 Redis的单线程特性 Redis是一个高性能的键值存储系统&#xff0c;其核心优势之一便是单线程架构。在Redis 6.0之前&#xff0c;其所有网络IO和键值对的读写操作都是由一个主线程顺序串行处理的。这种设计简化了多线程编程中的锁和同步问题&…

HarmonyOS Next 组件或页面之间的所有通信(传参)方法总结

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;上&#xff09; 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;下&#xff09; 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇&#xff08;上&#xff09; 【…

API接口:助力汽车管理与安全应用

随着汽车行业的飞速发展&#xff0c;越来越多的汽车管理技术被应用到交通安全和智慧交通系统中。在这一过程中&#xff0c;API接口起到了至关重要的作用。通过API接口&#xff0c;我们可以实现诸如车主身份验核、车辆信息查询等功能&#xff0c;从而为汽车智慧交通发展与安全应…

C哈的刷题计划之输出数字螺旋矩阵(1)

1、盲听C哈说 都说数据结构与算法是编程的核心&#xff0c;它们两个是内功与心法&#x1f600;&#xff0c;其它编程工具只是招式&#xff0c;学会了内功与心法&#xff0c;学习新事物&#xff08;这里特指层出不穷的IT技术&#xff09;就没有那么难了&#xff0c;实际上&#…