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 目录中。

bash 复制代码
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的版本号。

bash 复制代码
PS C:\> nvm -v
1.1.12
PS C:\>

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

软链接可以理解为快捷方式,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 配置文件,需要手动创建。可以用命令配置项目,例如:

bash 复制代码
nvm root D:\Applications\nvm

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

配置内容如下:

bash 复制代码
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才能真正让它工作。

bash 复制代码
PS C:\> nvm on
nvm enabled

4.2 list (ls)

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

bash 复制代码
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 版本。

bash 复制代码
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:\>

命令参数

bash 复制代码
nvm install 20.16.0 # 安装具体版本
nvm install 20      # 安装20版最新latest版本
nvm install lts     # 安装最新的latest版本

4.4 uninstall

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

bash 复制代码
nvm uninstall 20.16.0

4.5 use

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

bash 复制代码
nvm use 20.16.0

4.6 所有命令

nvm help 命令查看所有命令。

bash 复制代码
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 :

bash 复制代码
npm config set prefix "D:\Applications\nvm\node\node_global"
npm config set cache "D:\Applications\nvm\node\node_cache"

注意

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

Npm 的依赖包镜像源配置:

bash 复制代码
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 已经是环境变量,可以作为变量直接使用:

bash 复制代码
%NVM_SYMLINK%\node_global
%NVM_SYMLINK%\node_modules

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

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

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

相关推荐
danplus13 分钟前
node发送邮件:如何实现Node.js发信功能?
服务器·node.js·外贸开发信·邮件群发·蜂邮edm邮件营销·邮件接口·营销邮件
青稞儿18 分钟前
面试题高频之token无感刷新(vue3+node.js)
vue.js·node.js
一个很帅的帅哥13 小时前
实现浏览器的下拉加载功能(类似知乎)
开发语言·javascript·mysql·mongodb·node.js·vue·express
chen序员16 小时前
如何切换淘宝最新镜像源(npm)【2024版】
npm
Bang邦16 小时前
使用nvm管理Node.js多版本
前端·node.js·node多版本管理
新知图书17 小时前
Node.js快速入门
node.js
FakeOccupational18 小时前
nodejs 007:错误npm error Error: EPERM: operation not permitted, symlink
前端·npm·node.js
亦舒.18 小时前
JSDelivr & NPM CDN 国内加速节点
前端·npm·node.js
代码搬运媛18 小时前
code eintegrity npm err sha512
前端·npm·node.js
猿来如此呀1 天前
运行npm install 时,卡在sill idealTree buildDeps没有反应
前端·npm·node.js