NVM NodeJs版本管理 通关宝典

news2024/9/29 19:16:10

NVM NodeJs版本管理 通关宝典.jpg

NVM NodeJs版本管理 通关宝典🏹

文章目录

  • NVM NodeJs版本管理 通关宝典🏹
    • 一、NVM是什么
    • 二、开始使用NVM
    • 三、NVM 命令速查
    • 四、手动安装特定Node版本(Windows)🙄
      • 4.1 NVM for windows 运行机制
      • 4.2 手动安装流程
    • 五、切换 NVM 下载镜像源
    • 六、常见问题
    • 参考资料💘
    • 推荐博文🍗


一、NVM是什么

NVM 是对于不同版本 NodeJs 的管理工具,NVM 允许安装不同版本 NodeJs,并通过命令行在这些版本之间切换,最大程度上解决在一台机器上对于依赖不同版本 NodeJs 项目,需要来回重装对应 NodeJs 版本的问题。
列如,如果在依赖 Node18 项目上使用 Node16 安装项目依赖,很有可能会出现这么一条提示,某个包必须要在 Node18 下安装 ,这个时候一般只有两种选择,要么就该项目更改至兼容 Node16,要么重新安装 Node18 版本,大多人会选择后者。

xxx@xxx.xx.xx: The engine "node" is incompatible with this module. Expected version ">=18". Got "16.20.2"

# 或则是
This project requires Node version ">=18"

NVM 原先起始于 Mac OSX 和 Linux 平台,Windows 平台下的 NVM 与这些平台的有所不同,Windows 平台下的 NVM 是基于 Golang 语言编写的,且利用了 Windows 的文件系统机制,有时候在网上搜索到的 NVM 命令发现不管用了,不要感到奇怪,八成是因为平台问题所导致。
除了 NVM 之外,还有 n 能够做到不同版本 NodeJs 之间的切换,这两种都是目前主流的方式,不同的是 NVM 是独立于 NodeJs 外用其他语言开发的软件工具,而 n 是 NodeJs 的一个包。从我个人评价来讲,我推荐使用 NVM,试图用被自己管理的东西作为依赖进行编写,感觉既很奇怪也没意义,不能做到像 NVM 独立于 NodeJs 一键式的操作,也达不到其他语言所拥有的性能与高效性,具体感兴趣的可以查看各自仓库主页了解。

一个有意思的消息是,NVM的作者正在开发代替 MVM For Windows 的替代升级版,详情可查阅https://github.com/coreybutler/nvm-windows/wiki/Runtime


二、开始使用NVM

**在使用之前,请确保卸载任何预先存在的 Node 安装,**打开 NVM 的 Github 发布页,选择 nvm-setup.exe 安装包,具体版本自行选择,一般下载最新。
个人觉得,使用 NVM 比使用 Node 安装包的安装流程还要简便,相比较传统的 NodeJS 安装包,NVM 的安装可谓是非常简易,也就四流程,排除掉开始、确定流程,实际需要操作的也就两个地方。
需要注意的是,NodeJs映射地址在安装完毕后并不会马上存在,只有在 NVM 中安装并使用了任何版本的 NodeJs 后,才会自动创建该目录, 如果使用了默认路径或需要更改,可以在配置文件中更改,详情见 三、手动安装特定Node版本(Windows) 。
2.1 NVM 安装流程
安装完毕后,打开终端输入以下命令,NVM 的安装流程到这就结束了,接下来可以按照自己习惯安装一些包,并且以以往的方式正常运行你的项目。

# 安装 NodeJs@16.20.2
nvm install 16.20.2
# 使用该版本 NodeJs
nvm use 16.20.2

# 验证 NodeJs 是否正常
node --version & npm --version

当然 NVM 的核心在于多版本控制,既然开始使用 NVM,那大多数人需要用到它的这个功能,以下命令主要展示如何安装多版本 NodeJs 并在不同版本间切换。

# 查看 NodeJs 已发布版本
nvm ls available
# 安装 NodeJs@18.18.2 与 NodeJs@14.21.3
nvm install 14.21.3 & nvm install 18.18.2
# 查看已有的 NodeJs 版本
mvm ls

# 使用 14.21.3 版本
nvm use 14.21.3
# 使用 18.18.2 版本
nvm use 18.18.2

三、NVM 命令速查

命令描述平台兼容示例
nvm arch显示当前 NodeJs 运行模式,32位/64位windows✅nvm arch
nvm current显示当前运行的 NodeJs 版本windows✅ liunx✅ mac✅nvm current
nvm debug显示 NVM 配置信息,如版本号、安装路径、不同版本 NodeJs 安装数等windows✅nvm debug
nvm install [arch]安装指定 NodeJs 版本,可以是 'latest’表示最新版本,'lts’表示最新稳定版本,设置[arch] 来安装32位还是64位,默认64windows✅ liunx✅ mac✅nvm install 16.20.2 64
nvm uninstall 卸载指定 NodeJs 版本windows✅ liunx✅ mac✅nvm uninstall 16.20.2
nvm use [version] [arch]使用指定 NodeJs 版本,设置[arch] 表示32位还是64位,默认64windows✅ liunx✅ mac✅nvm use 16.20.2
nvm list [available]列出已安装的 NodeJs 版本,输入 available 列出可安装版本,别名lswindows✅ liunx✅ mac✅nvm list
nvm ls
nvm on启用 NodeJs,使用已有的最新 NodeJs 版本windows✅nvm on
nvm off关闭 NodeJs,此时系统环境不存在 NodeJswindows✅nvm off
nvm proxy [url]设置用于下载的网络代理windows✅nvm proxy 192.168.0.1
nvm node_mirror [url]设置 NodeJs 下载镜像源windows✅nvm node_mirror https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/
nvm npm_mirror [url]设置 npm 下载镜像源windows✅nvm npm_mirror https://registry.npmmirror.com
nvm root [path]设置 NodeJs 映射目录windows✅
nvm ls-remote列出可安装版本liunx✅ mac✅nvm ls-remote
nvm alias设置版本别名,支持 use 别名,特殊 default 名称可在任意新 shell 中使用的默认版本liunx✅ mac✅nvm alias 16 16.20.2
nvm alias default 16.20.2
nvm run 切换到其他版本的 Node 并立即打开 Node 控制台liunx✅ mac✅nvm run node

四、手动安装特定Node版本(Windows)🙄

除了通过 NVM 自带的命令进行安装之外,用户其实可以自行手动安装,这种情况非常适合在没网络,只能使用离线资源的情况下。

4.1 NVM for windows 运行机制

在讲解如何手动安装之前,先来了解一下 NVM 对于多个 Node 版本管理方式。如果已经在 NVM 上安装了部分 NodeJs 版本,那么在 NVM 的安装目录下就能看到存放对应版本的文件夹目录,里面装的其实就是与 NodeJS 官方一模一样的程序文件,NVM 在 use 一个 NodeJs 版本时会将对应的版本放到 NodeJs 运行快捷地址,此地址对应在安装 NVM 时选择的 NodeJs 安装地址,可以简单理解成普通安装 NodeJs 安装包时的选择目录,在 二、开始使用NVM 里的流程中提到过,默认是在 C 盘,如果后期需要更改位置,可以更改 NVM 安装目录下的 settings.txt 文件,而不重新安装。
如果还想要了解更多 NVM 在 Windows 平台的机制,可以去查看 NVM Github地址 说明文档。

root: # NVM安装地址
path: # NodeJs安装地址
arch: # NodeJs安装位数,32 or 64
proxy: # 下载代理,一般为none
node_mirror: # NodeJs镜像源地址
npm_mirror: # Npm镜像源地址

4.1 版本映射原理

4.2 手动安装流程

1)、下载对应版本安装包
在 Node 官网 下载地址上,可以看到 NodeJs 各版本下载入口都在这,其中偶数版本均为受到长期支持的 LTS 稳定版本,建议下载并使用 LTS 版本。需要注意的是,需要在 NVM 上使用并不是需要一个安装程序,而是对于 NodeJs 的执行文件,请下载这些文件的压缩包。

特殊版本可在国内镜像源下载。

4.2 NodeJs版本表
4.3 NodeJs下载页

2)、在 NVM 目录下创建以版本命名的文件夹
将下载下来的文件解压,并丢入NVM 目录下创建以版本命名的文件夹中,文件夹名称与其他版本命名规则保持一致,别忘记带个 v 前缀。

3)、验证所安装版本的 NodeJs
在 NVM 中列出版本列表,并切换至手动安装的版本,检查是否正确安装,至此就大功告成。

# 列出 NodeJs 版本
nvm ls
# 以14.21.3版本为例进行验证
nvm use 14.21.3
node --version & npm --version

五、切换 NVM 下载镜像源

在 NVM 控制镜像源很简单,也不用担心每个 NodeJs 版本都要配置一次,NVM 都为我们处理好了,只需配置一次,所有不同版本的 NodeJs 都能被更改。对于 NodeJS 下载镜像源来说,使用频率比较少,可以不更改。

# npm 更改为淘宝镜像源
nvm npm_mirror https://registry.npmmirror.com
# NodeJs 下载地址更改清华大学镜像源
nvm node_mirror https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/

不同 NodeJs 对于全局包地址都是共享的,对于第三方包管理工具,需要单独进行配置修改,以 yarn 为列。

# 查看当前镜像源
yarn config get registry --global
# 设置淘宝镜像源
yarn config set registry https://registry.npmmirror.com --global

这些命令本质上都在修改配置文件,NVM 安装目录下的 setting.text


六、常见问题

主要讲解在使用 NVM 中可能会遇到的问题,并提供应对方法,80%的问题可通过手动安装解决。

  • Version xx.xx.xx is not available.

    需要安装的版本在云端不存在,要么更换 NodeJs 下载镜像源,要么手动安装。

  • Could not download npm for node XXXXX

    如果在安装某些特定版本时出现了下述提示,那么大概是官方服务器下载地址出了问题,一般也在特定版本下才出现,。要是遇到这种情况的话,那么只能自己手动去node官方下载所需版本存放到NVM版本库中,参考 三、手动安装特定Node版本
    image.png

  • npm不是内部或外部命令,也不是可运行的程序或批处理文件。

    检查一下版本库中文件是否完整,如果不完整尝试重新安装该版本,实在不行手动去node官方下载所需版本存放到NVM版本库中。6.1 文件异常


参考资料💘

🍅因发布平台差异导致阅读体验不同,源文贴出:《NVM 管理Node多版本通关宝典》

  • 官方手册:
    • NVM for windows README.md
    • NVM README.md
  • 网络文献:
    • how-to-install-use-node-version-manager-nvm
    • 淘系前端团队:管理 node 版本,选择 nvm 还是 n?
  • 镜像源:
    • 清华大学Node镜像源

推荐博文🍗

  • 『精』CSS 小技巧之BEM规范
  • 『干货』WebStorm代码模板配置大全

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

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

相关文章

docker拉取镜像提示 remote trust data does not exist for xxxxxx

1、How can I be sure that I am pulling a trusted image from docker 2、docker: you are not authorized to perform this operation: server returned 401. 以上两个问题可以试试以下解决办法 DOCKER_CONTENT_TRUSTfalse 本人是使用jenkins部署自己的项目到docker容器出现…

【技巧】IDEA 使用小技巧(三)

IDEA 使用小技巧(三) 配置目录Ctrl 鼠标方法缩小字体 配置目录 IDEA 在使用的过程中会在 C 盘的用户目录下写入相关配置,目录如下: "C:\Users\个人用户名\AppData\Local\JetBrains" "C:\Users\个人用户名\AppDa…

在线制作假期承诺书,电子手写签名确认,一键导出打印。

假期将至,为积极落实安全管理规定,单位通常需要下发安全承诺书进行签字确认。 易查分可以实现网上下发安全承诺书通知,让查询者进行签名确认,还可以生成PDF,方便打印一人一张的纸质版承诺书,本次就来介绍如…

C#编程-实现函数重载

考虑一个示例:您必须编写一个程序来实现计算器的功能。计算器执行各种运算,例如数字的加、减及乘等。可以对任何类型的数据执行这些运算。这是否意味着您必须定义单独的函数名(如addInteger、addFloat和addDoublie)对每种此类数字…

扫码支付是怎么工作的?

扫码支付是怎么工作的? 本文转自 公众号 ByteByteGo,如有侵权,请联系,立即删除 过去的几十年,支付技术发生了很大的改变。下图给我们显示了 POS 终端的进化。从一开始的纸钞收银机,到刷卡机,再到…

Python 教程 02:Python 编程环境的搭建与 IDE 的选择

目录 一、搭建 Python 环境 1.1 Python 官网 1.2 下载 Python 1.2.1 选择版本 1.2.2 选择平台 1.2.3 下载安装文件(Windows & macOS) 1.3 安装环境 1.3.1 Windows 平台 1.3.2 macOS 平台 1.3.3 Linux 平台 1.4 验证安装是否成功 二、选择…

OpenHarmony应用构建工具Hvigor的构建流程

前言 OpenHarmony 应用和服务使用 Hvigor 作为工程的构建工具。本篇文章将介绍 Hvigor 的构建流程,通过修改脚本配置使 Hvigor 执行自定义任务。 Hvigor 的构建流程 加载命令行参数和环境变量;初始化项目结构,创建 Project 和 Module 实例…

计算机网络-VLAN原理与配置

之前我们学习了以太网的基础知识,了解了网络交换设备的发展,交换机的工作原理,广播域和冲突域。 一、概述 还简单了解了以太网的CSMA/CD通讯机制,以太网是建立在CSMA/CD (Carrier Sense Multiple Access/Collision Detection&…

C++ 学习笔记之运算符重载+案例

目录 一、C 运算符重载 二、定义一个成员函数或全局函数 三、计算时间 1.计算时间差 2.时间加减 四、一个运算符重载实例 一、C 运算符重载 是一种特性,它允许程序员重新定义已有的运算符的行为,以适应自定义类型的操作。通过运算符重载&#xff0…

java内存屏障

参考:https://blog.csdn.net/weixin_73077810/article/details/132804522 内存屏障主要用于解决线程的可见性、有序性问题 代码案例: ReentrantLock保证可见性的原理 在 lock.lock() 和 lock.unlock() 时,都会操作 AbstractQueuedSy…

UEditor在编辑对齐方式时产生额外空行问题

一、问题描述 一个关于UEditor富文本编辑器的问题:在编辑内容对齐方式后保存后浏览器显示的段落上下会比原先多出一些间距。 下面是对齐编辑后,未保存前的的HTML: 保存后,实际会多出一个段落空行: 二、问题调查 经…

Java多线程技术11——ThreadPoolExecutor类的使用1-备份

1 概述 ThreadPoolExecutor类可以非常方便的创建线程池对象,而不需要程序员设计大量的new实例化Thread相关的代码。 2 队列LinkedBlockingQueue的使用 public class Test1 {public static void main(String[] args) {LinkedBlockingQueue queue new LinkedBlocki…

字节跳动基础架构SRE-Copilot获得2023 CCF国际AIOps挑战赛冠军

近日,2023 CCF国际AIOps挑战赛决赛暨“大模型时代的AIOps”研讨会在北京成功举办,活动吸引了来自互联网、运营商、科研院所、高校、软硬件厂商等领域多名专家学者参与,为智能运维的前沿学术研究、落地生产实践打开了新思路。决赛中&#xff0…

leetcode算法题之记忆化搜索总结

记忆化搜索,可以理解为带备忘录的递归,方便进行剪枝,是一种以空间换时间的策略。 本章目录 1.斐波那契数2.不同路径3.最长递增子序列4.猜数字大小II5.矩阵中的最长递增路径 1.斐波那契数 斐波那契数 class Solution { public://递归int f…

GitEE-GitHub实现加速访问与下载项目

gitee域名:https://gitee.com gitee域名:https://github.com 一、从github导出项目到gitee上面,从而实现加速访问与下载 gitee和github都有同步其他仓库的功能,比如码云上就能直接从github或gitlab中导入; 只需要填…

路由器02_静态路由DHCP

一、静态路由 1、静态路由特点 由管理员手工配置,是单向的,缺乏灵活性 2、默认路由 默认路由是一种比较特殊静态路由,一般用于末节(末梢)网络,直接指定目标为任何地方 二、静态…

墨墨智库正式上线:开启您的AI智慧之旅

在这个由数据驱动的时代,AI技术正迅速改变我们的工作和生活方式。有没有想过一个平台可以为您提供所有AI相关资源的便捷访问?这就是「墨墨智库」的使命。我们非常高兴地宣布,经过精心准备和期待,「墨墨智库」现已正式上线&#xf…

深入理解C指针

深入理解C指针 ​#C语言 #​ #C指针 #​ 1 认识指针 指针:一个存放内存地址的变量 1.1 指针和内存 ​​ ‍ 阅读指针声明时候,可以选择倒过来读,会更容易理解。 指针被赋值为NULL时候,会被解释为二进制0. void指针 具有和…

docker 安装elasticsearch、kibana、cerebro

安装步骤 第一步安装 docker 第二步 拉取elasticsearch、kibana、cerebro 镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2 docker pull docker.elastic.co/kibana/kibana:7.10.2 docker pull lmenezes/cerebro:latest第三步、创建 容器 创建e…

SQL Server从0到1——写shell

xp_cmdshell 查看能否使用xpcmd_shell; select count(*) from master.dbo.sysobjects where xtype x and name xp_cmdshell 直接使用xpcmd_shell执行命令: EXEC master.dbo.xp_cmdshell whoami 发现居然无法使用 查看是否存在xp_cmdshell: EXEC…