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

一、前言

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共享一个公共包目录。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值