NVM安装管理node.js版本(简单易懂)

news2024/12/29 10:04:22

一、前言

1.1 简介

NVM(Node Version Manager)是 node.js 的版本管理器,用 shell 脚本切换机器中不同版本的 nodejs。

Nodejs为什么需要多个版本?

有经验的开发者可能遇到过,某个依赖包明确nodejs是某个版本,或者不高于某个版本才能工作。例如将npm项目打包exe可执行文件时,打包工具pkg因为没有适配node20版本,只能按要求切换到node18版本使用。这时候如果没有版本管理器,自己得重新下载安装对应nodejs版本。而有些nodejs原生addons插件开发者,甚至需要在32位和64为版本之间切换,光是这些环境配置的问题就让人头疼。

NVM能自动切换不同版本的nodejs使用,还提供了不同版本的下载和安装,就能很方便简化以上的这些工作。有用过python的朋友可能知道,NVM的作用和conda一样,都是机器上管理多个版本解释器环境的工具。

1.2 前置知识

本文需要掌握配置环境变量,假如你已经掌握可以跳过本小节。

环境变量是操作系统正常运行需要的参数,具体起什么作用这和具体的环境变量相关。例如环境变量中配置了系统安装目录、临时文件夹目录等。

进入环境变量设置方法

  • 方法1:控制面板->系统和安全->系统->高级系统设置->环境变量按钮
  • 方法2:桌面“计算机”鼠标右键属性 -> 高级系统设置 -> 环境变量按钮
  • 方法3:Windows10/11,搜索关键词“环境变量”从“编辑系统环境变量” -> 环境变量按钮
  • 方法4:终端执行“/SystemPropertiesAdvanced”程序 -> 环境变量按钮

创建环境变量

环境变量中分为用户变量和系统变量两部分,用户变量只作用于当前用户,系统变量作用于所有用户,本文需要设置的是“系统变量”。

创建环境变量时,点击“新建”按钮,输入变量名和变量值确定。程序通常会用变量名读取变量值,在环境变量中用 %变量名% 读取值,例如 %A% 表示用A的值。

Path环境变量

Path是关键的环境变量,它的值包含多个目录路径,这些路径会被终端程序(cmd/powershell)用来查找执行程序。实际上查找执行程序的路径不只有path的路径,包含以下这些路径:

  • 当前工作路径
  • path环境变量
  • windir环境变量(windows系统安装目录)
  • system32目录

Cmd用命令 echo %path% 或者powershell用命令 echo $env:path ,就能看到可用的路径。许多第三方程序需要在终端执行,会把程序所在目录路径添加到path中,例如java、python、node等程序。

二、NVM工作原理

先说结论,NVM用一个软链接实现nodejs版本切换。切换版本时,NVM用 NVM_SYMLINK 环境变量的值创建的软链接,指向要切换版本nodejs安装目录路径,终端中执行node程序时,从软链接找到 node.exe 程序执行。在操作系统中,访问软链接都会被重定向到软链接指向的真实路径。

NVM_SYMLINK 需要我们配置在环境变量中,它的值就是软链接的路径,例如值是 D:\nvm\node ,NVM用该值创建软链接,这意味着软链接名总是 D:\nvm\node

NVM 切换 18.20.4 版本时,创建名为 D:\nvm\node 软链接,它的值是 D:\nvm\v18.20.4 ,软链接指向它的值的目录,或者说 D:\nvm\nodeD:\nvm\v18.20.4 的软链接。

拓展知识

软链接是计算机文件系统的符号链接,可以理解为Windows文件系统的快捷方式,作用是用来指向某个目录或文件实体。例如访问A,如果A是B的软链接,那么访问的是B;如果A是C的软链接,那么访问的是C。

软链接和快捷方式的区别是,快捷方式是.lnk文件,软链接是.symlink文件,快捷方式创建后能被修改,而软链接一旦创建就不能修改。另外还有硬链接,这里不深究,有兴趣可以参考 https://zhuanlan.zhihu.com/p/661358379 这篇文章。

过程如下图所示(注意虚线实线)

NodeJs安装目录
环境变量
创建
或指向
或指向
查找执行
查找执行
v18.20.4
v20.15.1
NVM_SYMLINK(软链接路径)
path(包含 NVM_SYMLINK)
nvm
终端
软链接
node.exe

明白软链接的作用后,NPM的配置信息也使用包含软链接的路径,这样就能在NVM更改软链接的指向后,NPM自动切换访问对应的目录。

提示

主要分为NVM配置和NPM配置两个部分。系统只有一个NVM需要配置,每个nodejs版本都有独立的npm包管理器,但npm共用一个配置文件,所以也只需要配置一次。

NVM配置部分,把nvm安装目录路径加到path环境变量,让终端能找到nvm程序;还要配置 NVM_SYMLINK 环境变量值是软链接名,NVM用它来创建软链接指向切换的nodejs安装目录;为了让终端找到切换后的node程序,还要把软链接名加入path环境变量,软链接名就是 NVM_SYMLINK 的值。

NPM配置部分,如果你有npm的配置经验,NVM管理的npm配置,区别只在于使用软链接的路径,让软链接来控制npm访问的真实路径,其他配置与原来并无不同。

在这里插入图片描述

具体的配置请看下文。

三、NVM安装配置

3.1 下载

请在 https://github.com/coreybutler/nvm-windows/releases 官方仓库下载需要的安装包。本文主要演示 Windows 系统中的安装, nvm-setup.exe 安装版和 nvm-noinstall.zip 免安装版,为了演示如何配置NVM以及避免黑盒操作,本人建议选择下载免安装版本。

注意,免安装版请解压.zip文件到 非中文无空格 的路径中,否则会存在意想不到的问题。本人解压到 D:\Applications\nvm 目录中。

D:\Applications\nvm\
    elevate.cmd
    elevate.vbs
    install.cmd
    LICENSE
    nodejs.ico
    nvm.exe
    setuserenv.vbs
    unsetuserenv.vbs

3.2 配置NVM环境变量

NVM需要把 安装目录软链接目录 添加到 path 环境变量。 nvm-setup.exe 安装版,在安装过程中会要求你输入这两个路径以设置环境变量,本文主要演示免安装版。

3.2.1 NVM_HOME

NVM需要添加 NVM_HOME 环境变量,变量值是NVM的安装目录路径(本人是 D:\Applications\nvm)。另外,因为 NVM 主要在终端中使用,所以要让终端找到 nvm 命令,也必须把 NVM 安装目录路径,添加到 path 环境变量中。因为已经设置了 NVM_HOME 环境变量,所以用 %NVM_HOME% 变量添加进 path 环境变量中,使用 %NVM_HOME% 变量表示取 NVM_HOME 的值。

添加 NVM_HOME 环境变量确定后,启动终端就能使用 nvm -v 就能看到NVM的版本号。

PS C:\> nvm -v
1.1.12
PS C:\>

现在只是能用NVM的相关命令,还不能完全能使用,还需要配置最核心的软链接目录。

3.2.2 NVM_SYMLINK

软链接可以理解为快捷方式,NVM工作原理 小结中已经解释了软链接的作用。

添加 NVM_SYMLINK 环境变量就是设置软链接,变量值是NVM的软链接目录路径(本人是 D:\Applications\nvm\node),NVM会在创建和删除软链接时用到该环境变量。还需要把它作为变量 %NVM_SYMLINK% 添加到path环境变量中,因为软链接就是nvm切换后的nodejs安装目录,只有把它添加到path,才能使用node命令。

在这里插入图片描述

注意

软链接不需要手动创建,用 nvm use 命令切换到某个 nodejs 版本时会自动创建。

3.3 配置文件 settings.txt

NVM的配置文件 settings.txt ,用来配置NVM的安装路径和镜像源等信息,使用国内的镜像源下载速度会快一些。

免安装版NVM解压后没有 settings.txt 配置文件,需要手动创建。可以用命令配置项目,例如:

nvm root D:\Applications\nvm

设置root值为D:\Applications\nvm,其他配置项同理。

配置内容如下:

root: D:\Applications\nvm
arch: 64
proxy: none
originalpath: .
originalversion: 
node_mirror: https://npmmirror.com/mirrors/node/
npm_mirror: https://npmmirror.com/mirrors/npm/
  • root: NVM安装路径
  • arch: 位数
  • node_mirror: nodejs安装包镜像源,nvm用来下载nodejs
  • npm_mirror: npm依赖包镜像源,nvm用来下载npm包管理器

提示

在安装低版本的node时,同步安装的 npm 版本有可能在指定的源中找不到。例如我当前配置的npm下载镜像是淘宝镜像。当我下载8.0.0指定的低版本node时,npm下载失败。此时,我必须去掉 npm_mirror 配置项,让nvm去默认的源下载。

四、NVM基本使用

NVM的命令主要是实现nodejs版本的管理,包括nodejs的安装、卸载、切换版本等。下面介绍nvm常用的命令。

4.1 on

on 命令用于启用 NVM ,只有启用NVM才能真正让它工作。

PS C:\> nvm on
nvm enabled

4.2 list (ls)

list 命令简写 ls 可以查看当前机器已安装的nodejs版本。参数 available 用来查看可安装的版本。

PS C:\> nvm list

  * 20.16.0 (Currently using 64-bit executable)
PS C:\> nvm list available

|   CURRENT    |     LTS      |  OLD STABLE  | OLD UNSTABLE |
|--------------|--------------|--------------|--------------|
|    22.6.0    |   20.16.0    |   0.12.18    |   0.11.16    |
|    22.5.1    |   20.15.1    |   0.12.17    |   0.11.15    |
|    22.5.0    |   20.15.0    |   0.12.16    |   0.11.14    |
|    22.4.1    |   20.14.0    |   0.12.15    |   0.11.13    |
|    22.4.0    |   20.13.1    |   0.12.14    |   0.11.12    |
|    22.3.0    |   20.13.0    |   0.12.13    |   0.11.11    |
|    22.2.0    |   20.12.2    |   0.12.12    |   0.11.10    |
|    22.1.0    |   20.12.1    |   0.12.11    |    0.11.9    |
|    22.0.0    |   20.12.0    |   0.12.10    |    0.11.8    |
|    21.7.3    |   20.11.1    |    0.12.9    |    0.11.7    |
|    21.7.2    |   20.11.0    |    0.12.8    |    0.11.6    |
|    21.7.1    |   20.10.0    |    0.12.7    |    0.11.5    |
|    21.7.0    |    20.9.0    |    0.12.6    |    0.11.4    |
|    21.6.2    |   18.20.4    |    0.12.5    |    0.11.3    |
|    21.6.1    |   18.20.3    |    0.12.4    |    0.11.2    |
|    21.6.0    |   18.20.2    |    0.12.3    |    0.11.1    |
|    21.5.0    |   18.20.1    |    0.12.2    |    0.11.0    |
|    21.4.0    |   18.20.0    |    0.12.1    |    0.9.12    |
|    21.3.0    |   18.19.1    |    0.12.0    |    0.9.11    |
|    21.2.0    |   18.19.0    |   0.10.48    |    0.9.10    |

This is a partial list. For a complete list, visit https://nodejs.org/en/download/releases
PS C:\>

4.3 install

install 是安装 nodejs 命令,后面参数跟版本号,如果参数是 lts 则安装最新的 latest 长期稳定版本,如果是18、19、20等大版本号,则会安装大版本中最新的 latest 版本。

PS C:\> nvm install 20.16.0
Downloading node.js version 20.16.0 (64-bit)...
Extracting node and npm...
Complete
npm v10.8.1 installed successfully.


Installation complete. If you want to use this version, type

nvm use 20.16.0
PS C:\>

命令参数

nvm install 20.16.0 # 安装具体版本
nvm install 20      # 安装20版最新latest版本
nvm install lts     # 安装最新的latest版本

4.4 uninstall

uninstall 是卸载版本命令,执行该命令将会删除对应版本的安装目录。当卸载的是当前版本时,软链接也会被删除。

nvm uninstall 20.16.0

4.5 use

use 命令用于切换版本,后跟参数版本号。要注意只能切换本地已安装的版本,切换前请 nvm list 查看是否安装该版本。当软链接不存在时,use命令将会创建软链接。

nvm use 20.16.0

4.6 所有命令

nvm help 命令查看所有命令。

nvm arch:显示节点运行在32位还是64位模式。
nvm current:显示当前版本。
nvm调试:检查NVM4W进程是否存在已知问题(疑难解答)。
nvm install <version> [arch]:版本可以是一个特定的版本,“latest”表示最新的当前版本,“lts”表示当前版本最新的LTS版本。可选地指定是安装32位还是64位版本(默认值)系统拱)。设置[arch]为“all”来安装32位和64位版本。在该命令的末尾添加——insecure以绕过远程下载服务器的SSL验证。
nvm list [available]:列出node.js的安装。在最后键入“available”,看看可以安装什么。别名为ls。
nvm on:启用node.js版本管理。
nvm off:关闭node.js版本管理。
nvm proxy [url]:设置用于下载的代理。保留[url]为空以查看当前代理。设置[url]为none删除代理。
nvm node_mirror [url]:设置节点镜像。默认为https://nodejs.org/dist/。[url]为空,使用默认url。
nvm npm_mirror [url]:设置npm镜像。默认为https://github.com/npm/cli/archive/。[url]为空,默认为url。
nvm uninstall <version>:版本必须是指定的版本。
nvm use [version] [arch]:切换使用指定的版本。可选地使用"latest""lts""latest"。“latest”是最新安装的版本。可选地指定32/64位架构。
NVM use <arch>将继续使用所选版本,但切换到32/64位模式。
nvm root [path]:设置nvm存放node.js不同版本文件的路径。如果未设置<path>,则显示当前根目录。
nvm[——]version:显示Windows下nvm的当前运行版本。别名为v。

五、NPM配置

Npm的配置方法和不使用nvm版本管理器时一样,只是配置prefix公共包和cache缓存的路径有区别。在不使用nvm时这两个路径指向两个固定的目录,但是nvm版本管理情况下使用了软链接,这时候这两个路径就必须指向软链接后的目录,因为软链接会被nvm切换版本时修改为nodejs安装目录,这样就实现了不同版本使用不同的prefix公共包目录和cache缓存目录。

5.1 命令配置

本人机器的nvm软链接NVM_SYMLINK 值是 D:\Applications\nvm\node 目录,软链接代表不同的nodejs版本安装目录,所以 npm 如下配置 prefix 和 cache :

npm config set prefix "D:\Applications\nvm\node\node_global"
npm config set cache "D:\Applications\nvm\node\node_cache"

注意

不需要手动创建这两个目录,在 npm 安装依赖包时会被自动创建。

Npm 的依赖包镜像源配置:

npm config set registry https://registry.npmmirror.com

该镜像源和NVM配置的镜像源作用不同,该镜像源是为某个版本的npm包管理器准备,npm会从这个源下载依赖包,而NVM的npm_mirror是让nvm下载npm包管理器。

5.2 配置文件

npm的配置文件 .npmrc 在用户目录中 C:\Users\用户名.npmrc ,用命令配置则会自动创建配置文件,也可以直接配置这个文件,配置如下:

prefix=D:\Applications\nvm\node\node_global
cache=D:\Applications\nvm\node\node_cache
registry=https://registry.npmmirror.com

5.3 配置NPM环境变量

Npm必须把prefix公共包目录添加到path环境变量,原因是公共包内可能会安装一些全局命令工具,例如第三方yarn包管理器,只有把node_global目录添加path,这些命令才能在终端使用。

path环境变量添加以下路径,因为 NVM_SYMLINK 已经是环境变量,可以作为变量直接使用:

%NVM_SYMLINK%\node_global
%NVM_SYMLINK%\node_modules

在这里插入图片描述

5.4 是否能多版本共用公共包?

可能有人会问,按以上的方法 prefix 公共包使用软链接路径,导致每个版本的公共包不共享,nvm切换nodejs版本后,一些公共包需要重新安装,是否可以多个版本 nodejs 共享一个公共包呢?只要不使用软链接路径就能做到,但是个人并不建议这么做。

使用nvm版本管理的目的是隔离 nodejs 的环境,每个版本使用的是适配它的依赖包,如果所有版本共享所有公共包,就丧失了nvm版本管理的优点,例如你不会在切换到node 18时,把不适配的依赖包卸载再重新安装适配的包,这样做和不使用nvm没区别,个人不建议多版本nodejs共享一个公共包目录。

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

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

相关文章

深度学习--RNN以及RNN的延伸

循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类能够处理序列数据的神经网络&#xff0c;在自然语言处理、时间序列分析等任务中得到了广泛应用。RNN能够通过其内部的循环结构&#xff0c;捕捉到序列中前后项之间的关系。下面我将从原理、作用、应用…

【AI绘画】Midjourney提示词详解:精细化技巧与高效实践指南

文章目录 &#x1f4af;Midjourney提示词基础结构1 图片链接1.1 上传流程 2 文字描述3 后置参数 &#x1f4af;Midjourney提示词的文字描述结构全面剖析1 主体主体细节描述2 环境背景2.1 环境2.2 光线2.3 色彩2.4 氛围 3 视角4 景别构图5 艺术风格6 图片制作方法7 作品质量万能…

振动分析-20-振动三要素的理解及决定设备分析水平的因素

1 对频谱分析的定位 一般咨询一个振动问题,很多人往往是要求把各种频谱贴上来看看,却很少有人问,振动过程、检修经历、设备结构、振动位置、振动方向、负荷关系、油温变化、转速影响等等。 刚刚接触振动检测时,对有关频谱分析方面资料如饥似渴,对于早期从事振动诊断的朋…

CentOS 7使用RPM安装MySQL

MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;允许用户高效地存储、管理和检索数据。它被广泛用于各种应用&#xff0c;从小型的web应用到大型企业解决方案。 MySQL提供了丰富的功能&#xff0c;包括支持多个存储引擎、事务能力、数据完整性…

Google Earth Engine(GEE)——计算非监督分类的中的面积和占比

函数: aggregate_sum(property) Aggregates over a given property of the objects in a collection, calculating the sum of the values of the selected property. 对一个集合中的对象的特定属性进行聚合,计算所选属性值的总和。 Arguments: this:collection (Featur…

嵌入式初学-C语言-二九

C语言编译步骤 预处理编译汇编链接 什么是预处理 预处理就是在源文件&#xff08;如.c文件&#xff09;编译之前&#xff0c;所进行的一部分预备操作&#xff0c;这部分操作是由预处理程序自动完成&#xff0c;当源文件在编译时&#xff0c;编译器会自动调用预处理指令的解析…

2024年大厂裁员严重,软件测试行业真的饱和了吗?

这短时间以来后台有很多小伙伴说找工作难&#xff0c;并且说软件测试行业饱和了&#xff1f;竟然登上了热榜 那么我今天带大家看看真实的市场行情&#xff0c;往下看 这个是公司联合某厂的HR招聘真实情况&#xff0c;很明显【软件测试】投简历竟然高达9999沟通才1千多&#xf…

【学术会议征稿】第七届土木建筑、水电与工程管理国际学术会议(CAHEM 2024)

第七届土木建筑、水电与工程管理国际学术会议&#xff08;CAHEM 2024&#xff09; 2024 7th International Conference on Civil Architecture, Hydropower and Engineering Management (CAHEM 2024) 第七届土木建筑、水电与工程管理国际学术会议&#xff08;CAHEM 2024&…

【蓝桥杯冲刺省一,省一看这些就够了-C++版本】蓝桥杯STL模板及相关练习题

蓝桥杯历年省赛真题 点击链接免费加入题单 STL map及其函数 map<key,value> 提供一对一的数据处理能力&#xff0c;由于这个特性&#xff0c;它完成有可能在我们处理一对一数据的时候&#xff0c;在编程上提供快速通道。map 中的第一个值称为关键字(key)&#xff0c;…

河南萌新联赛2024第(六)场:郑州大学(ABCDFGHIL)

文章目录 写在前面A 装备二选一&#xff08;一&#xff09;思路code B 百变吗喽思路code C 16进制世界思路code D 四散而逃思路code F 追寻光的方向思路code G 等公交车思路code H 24点思路code I 正义从不打背身思路code L koala的程序思路code 河南萌新联赛2024第&#xff08…

Transformer总结(二):架构介绍(从seq2seq谈到Transformer架构)

文章目录 一、seq2seq应用介绍二、编码器解码器架构2.1 流程介绍2.2 原理说明 三、Transformer整体结构和处理流程3.1 Attention机制在seq2seq中的引入3.2 比较RNN与自注意力3.3 Transformer架构介绍3.4 处理流程3.4.1 编码器中处理流程3.4.2 解码器在训练阶段和预测阶段的差异…

Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明

系统要求 支持x64_64架构、aarch64架构&#xff08;需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9&#xff09;。 功能支持 Linux平台x64_64架构|aarch64架构RTMP直播推送SDK 音频编码&a…

UDP服务端、TCP的c/s模式

一、UDP服务端 socket bind //绑定 recvfrom ssize_t recvfrom(int sockfd, socket的fd void *buf, 保存数据的一块空间的地址 …

网络编程TCP与UDP

TCP与UDP UDP头&#xff1a; 包括源端口、目的地端口、用户数据包长度&#xff0c;检验和 数据。 typedef struct _UDP_HEADER {unsigned short m_usSourPort;    // 源端口号16bitunsigned short m_usDestPort;    // 目的端口号16bitunsigned short m_usLen…

一款B to B Connector的仿真结果与开发样品实测的结果对比

下面是一款B to B 连接器开发初期的CST仿真结果: 回波损耗 插入损耗 时域阻抗 开发样品出来后第三方测试机构的实测结果

Auto CAD 常用指令汇总 [持续更新]

简介 AutoCAD是由美国Autodesk公司开发的一款自动计算机辅助设计软件&#xff0c;广泛应用于建筑、工程、城市规划等多个领域。自1982年发布以来&#xff0c;AutoCAD不断进化&#xff0c;成为行业标准之一。它支持二维绘图和三维建模功能&#xff0c;用户可以精确绘制各种图形&…

BSCI(Business Social Compliance Initiative)验厂

在当今全球化的经济环境中&#xff0c;企业社会责任&#xff08;Corporate Social Responsibility, CSR&#xff09;已成为衡量企业成功与否的重要标尺之一。而BSCI&#xff08;Business Social Compliance Initiative&#xff09;验厂&#xff0c;作为国际间广泛认可的社会责任…

服务器Ubuntu22.04系统 使用dcocker部署安装ollama和搭配open_webui使用

服务器Ubuntu22.04系统 使用dcocker部署安装ollama和搭配open_webui使用 一、ubuntu和docker基本环境配置 1.更新包列表&#xff1a; 打开终端&#xff0c;输入以下命令&#xff1a; sudo apt-get updatesudo apt upgrade更新时间较长&#xff0c;请耐心等待 2. 安装docke…

[MOCO] Momentum Contrast for Unsupervised Visual Representation Learning

1、目的 无监督表示学习在自然图像领域已经很成功&#xff0c;因为语言任务有离散的信号空间&#xff08;words, sub-word units等&#xff09;&#xff0c;便于构建tokenized字典 现有的无监督视觉表示学习方法可以看作是构建动态字典&#xff0c;字典的“keys”则是从数据&am…

测评了几百款素材管理软件,新手设计师如何进行高效的素材管理?附教程

设计师朋友们&#xff0c;大家在日常工作中肯定积累了各种各样的素材&#xff0c;大家都保存在哪里呢&#xff1f;是散落在电脑磁盘里&#xff0c;还是用一个专门的素材管家管理呢&#xff1f;作为新手设计师&#xff0c;目前是在使用一款经典好用的素材管理软件—Eagle&#x…