在项目中使用Volta控制node版本

news2025/1/10 23:20:33

在项目中使用Volta控制node版本

前端的技术很多年前就已经是井喷的状态了,基本每一年都有技术的迭代,而node作为前端基石之一也是一年一个样,这就导致了不同年代的版本使用不同的项目会经常出问题,高版本的node无法用于老的项目。之前大家的解决方案都是nvm,这里我给大家推荐一下Volta

一、为什么会需要Volta

起初Volta只是我电脑安装nvm有问题的替代方案,但在使用过程中我认为Volta是nvm的完美替代者,它能很好的解决一些nvm的痛点。

1.不同的项目需要频繁的切换node版本

假设我们有三个项目,一个是老的项目,一个是需要迁移的新的项目,还有一个是组件库或者别的什么项目,这三个项目是不同时期的产物,假设老的项目版本要求是node@14,新的项目是node@16,组件库的要求是node@18,这样我们在启动这些项目的时候就需要频繁的切换node的版本。

Volta就不会出现这种情况,当我们使用下面的命令时:

$ volta pin node@14

在项目的package.json文件中会出现如下配置:

  "volta": {
    "node": "14.21.3"
  }

Volta会自动选择你指定的大版本下的最优版本,有了这个配置后Volta会自动使用这个版本去运行该项目无需手动切换node版本。

2.统一管理node版本,无需保存对应项目的node版本记录

如果使用nvm进行node版本管理,我们需要清楚的知道项目所使用的node版本,所以一般会将node版本写在readme中,但是很难保证所有公司的每个项目都是按规范来的,而当我们使用Volta管理node版本的时候我们会将node版本限制在package.json中,这更像是一种强规范。

3.可以单独设置npm版本

npm一般都是和node绑定的,下载node的时候也会将对应版本的npm下载下来,所以nvm只能通过切换node版本来切换npm版本,而Volta可以单独设置npm的版本。

$ volta install npm@6.14.8
$ volta install yarn@1.19.2

但是需要注意的是,包管理器npmyarn都是基于node的包管理器,所以限制它们版本前必须先限制node的版本

$ volta pin node@16.20.2
$ volta pin yarn@1.19.2
$ volta pin npm@6.14.8 

生成的限制如下:

  "volta": {
    "node": "16.20.2",
    "yarn": "1.19.2",
    "npm": "6.14.8"
  }

二、Volta的优缺点

优点
  1. 使用rust构建,速度快
  2. 跨平台
  3. 可以强制指定node版本
  4. 全局安装的包和node版本相关联,不同版本之间的包会有隔离
缺点
  1. 对pnpm的兼容性不太好
  2. 社区支持有限,可能会出现未知问题
  3. Volta对32为node的支持可能会有些问题

三、Volta的常用命令

$ volta install node # 下载最新版本的node
$ volta install node@16.20.2 # 下载指定node
$ volta install node@14 # 下载指定大版本下的node
$ volta uninstall node@16.20.2 # 卸载指定node
$ volta pin node@16.20.2 # 限制项目node版本
$ volta list all # 查看volta下载的所有内容
$ volta list node # 查看volta下载的node

如果需要查看其他所有命令可以直接键入

$ volta

命令行会出现Volta所支持的所有命令。

四、Volta的安装

1.下载

[Volta中文网站](Volta (jikun.dev))和Volta官网都有如何下载安装的步骤,这里给出下载链接https://github.com/volta-cli/volta/releases/download/v1.1.1/volta-1.1.1-windows-x86_64.msi。

2.安装

下载Volta后我们双击安装,一直next即可,需要注意的是Volta无法更改安装目录,默认会安装在C盘,其实此时Volta安装后就可以使用了,但是可能会有人觉得在C盘有点膈应,所以我们可以手动移动Volta文件夹到其他盘,这其实有点像Google Chrome。

3.文件夹移动

直接在C盘中找到Volta文件夹,然后直接将整个文件夹剪切到其他盘中。剪切后使用Volta应该会出现Volta不是一个命令的问题,所以这个时候我们需要更改一下环境变量。

4.设置环境变量

打开环境变量设置,首先新建用户环境变量和系统变量,两个变量变量名和值都是一样的,变量名为**VOLTA_HOME,值为剪切后的Volta文件夹路径,我这里是D:\Volta**

然后在用户变量和系统变量中找到Path,然后新建点击新建并输入**%VOLTA_HOME%**

当然如果最开始安装Volta的时候如果给予了权限那么Volta应该是有默认的环境变量的,那么我们将上面新建的操作更改为替换默认的Volta环境变量即可。

需要注意的是:有人可能在最开始就有设置node的环境变量,如果Volta的环境变量在node的环境变量后面那么我们使用node的时候默认还是会走的node而不是Volta下载的node

如果我们在cmd中键入Volta出现如下显示时代表Volta就可以正常使用了

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1820451.html

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

相关文章

PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)复现

PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)复现 1.漏洞描述: PHP(Hypertext Preprocessor,超文本预处理器)是一种广泛使用的开源脚本语言,主要用于Web开发,用于生成动态…

第五十一天 | 1143.最长公共子序列

题目:1143.最长公共子序列718.最长重复子数组的区别是,子序列不要求连续,子数组要求连续。这一差异体现在dp数组含义和递推公式中,本题是子序列,那就要考虑上nums1[i - 1] ! nums2[j - 1]的情况。 本道题与 1.dp数组…

JavaSE----类和对象(中)

5. 对象的构造及初始化 5.1 如何初始化对象 通过前面知识点的学习知道,在Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败。 public static void main(String[] args) {int a;System.out.println(a); }// Error:(26, 28) jav…

案例 | JIMUMETA元宇宙体验馆,助力品牌打开营销新思路!

视创云展作为行业领先的3D数字化场景营销平台,专注于帮助企业迅速构建集多样化营销活动于一体的元宇宙空间。 通过整合虚拟展厅、数字人互动、音视频通话以及弹幕聊天等创新功能,我们为企业打造极具沉浸感的体验环境,并提供高效的线上营销手段…

ISCC2024 winterbegins

首先,用IDA打开程序,看到一大堆while(1)又套着while(1)的结构,肯定是控制流平坦化了,我们可以使用IDA插件d810去掉。 现在程序就好看多了。如果IDA没有显示这堆中文字符串,可以考虑使用IDA8.3,就可以显示…

【记录】ChatGLM3-6B大模型部署、微调(一):部署

ChatGLM3介绍 源码连接: ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性&#xf…

江协科技51单片机学习- p4 点亮一个LED灯

前言: 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记,在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用: 51单片机入门教程-2…

安装ENVI 6.0直接打开Landsat L2SP影像

文章目录 前言ENVI 6.0申请安装安装过程检查安装: 直接打开L2SP文件(不修改头文件)结语 前言 试用软件只是作为学习交流使用,不能应用于商业、发表文章等依据。 前面文章(ENVI打不开Landsat 的L2SP影像文件&#xff09…

震坤行亮相2024成都工博会,赋能产业新发

为期3天的成都工博会于2024年4月23日在成都国际会展中心完美落幕。震坤行再次紧跟西部智能制造产业发展步伐,亮相现场,实力“圈粉”,为西部地区的制造企业带来打造了一场工业互联网盛宴。 本届成都工博会成功举办,展会聚集了各个国…

C++ Primer 第五版 第16章 模板与泛型编程

模板是C中泛型编程的基础。一个模板就是一个创建类或函数的蓝图或者说公式。当使用一个vector这样的泛型类型,或者find这样的泛型函数时,我们提供足够的信息,将蓝图转换为特定的类或函数。这种转换发生在编译时。 一、定义模板 1. 函数模板…

OceanBase 并行执行参数 parallel_servers_target 理解

为了最大程度降低 PX 使用难度,OceanBase 3.1 版起,parallel_max_servers 参数废弃。 用户只需用好 parallel_servers_target 即可。 target 的用途 用一个酒吧的例子来粗略理解下 parallel_servers_target 的意思: target 先生开了一个酒…

Epicor BAQ - BAQ设计与调用

目录 一、BAQ设计常用功能1.跨公司查询2.修改作者3.添加筛选条件4.使用BAQ参数5.子查询 二、在客制化中调用BAQ取数三、在BPM中调用BAQ取数四、结束 一、BAQ设计常用功能 1.跨公司查询 在BAQ的General页面勾选Cross-company后,BAQ可以跨公司查询数据。 2.修改作…

联邦学习论文阅读:2018 Federated learning with non-IID data

介绍 这是一篇2018年挂在arXiv上的文章,是一篇针对FL中数据Non-IID的工作。 作者发现,对于高度Non-IID的数据集,FedAvg的准确性下降了55%。 作者提出了可以用权重散度(weight divergence)来解释这种性能下降&#xff…

基于JSP技术的大学生校园兼职系统

开头语 你好呀,我是计算机学长猫哥!如果有相关需求,可以通过文末的联系方式找到我。 开发语言 JSP 数据库 MySQL 技术 JSP JavaBeans 工具 MyEclipse、Tomcat、Navicat 系统展示 首页 学生登录界面 招聘信息界面 论坛中心界面 摘…

时间类:Calendar

一.Calendar概述 1.Calendar代表了系统当前时间的日历对象,可以单独修改,获取时间中的年,月,日 2.细节:Calendar是一个抽象类,不能直接创建对象。 二.获取Calendar日历类对象的方法 // 会根据系统的不同时区来获取不同的日历对象 // 会根据系统的不同…

LLM的7种推理框架

我们如何在本地安全地运行私有的LLMs呢?开源模型为此提供了可能的解决方案。本文将介绍七种方法。 Hugging Face的transformers 这是一个Python库,可以简化本地运行LLM的过程。 Transformers的优点: 自动模型下载提供代码片段非常适合实验…

C语言的数据结构:串、数组、广义表

一、串 1、串的定义 串是一个线性表,但其节点中的内容只能为字符,所以也称为字符串。 字符串中可以有多个字符,也可以没有字符。没有字符的叫作:空串。 空串:""。 有值的串:"1123"。 只…

“AI 热会逐渐降温,AGI 普及不了多少场景!”对话《Core Java》作者 Cay Horstmann...

作者 | 王启隆 责编 | 唐小引 出品丨AI 科技大本营(ID:rgznai100) 已过花甲之年的 Cay Horstmann 是 Java 经典著作《Java 核心技术》和《Java 核心技术:速学版》的作者,帮助了无数 Java 开发者启蒙进阶。截止到今天&a…

3d数字家居展馆线上制作工具更具创意

立足于引领未来展览新潮流的出发点,深圳华锐视点3D云展厅依托前沿的Web3D技术和vr全景制作技术,提供Web3D在线创意展厅搭建编辑器,为您打造一个突破时空限制、风格多样的线上展厅。 Web3D在线创意展厅搭建编辑器将您的产品以三维模型的形式生…

MultiTrust:首个综合统一的多模态信任度基准(上)

随着我们迈向人工通用智能(AGI)的时代,出现了开创性的大语言模型(LLMs)。凭借它们强大的语言理解和推理能力,已经无缝地将其他模态(例如视觉)整合到LLMs中,以理解不同的输…