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
**在使用之前,请确保卸载任何预先存在的 Node 安装,**打开 NVM 的 Github 发布页,选择 nvm-setup.exe 安装包,具体版本自行选择,一般下载最新。
个人觉得,使用 NVM 比使用 Node 安装包的安装流程还要简便,相比较传统的 NodeJS 安装包,NVM 的安装可谓是非常简易,也就四流程,排除掉开始、确定流程,实际需要操作的也就两个地方。
需要注意的是,NodeJs映射地址在安装完毕后并不会马上存在,只有在 NVM 中安装并使用了任何版本的 NodeJs 后,才会自动创建该目录, 如果使用了默认路径或需要更改,可以在配置文件中更改,详情见 三、手动安装特定Node版本(Windows) 。
安装完毕后,打开终端输入以下命令,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 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位,默认64 | windows? 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位,默认64 | windows? liunx? mac? | nvm use 16.20.2 |
nvm list [available] | 列出已安装的 NodeJs 版本,输入 available 列出可安装版本,别名ls | windows? liunx? mac? | nvm list nvm ls |
nvm on | 启用 NodeJs,使用已有的最新 NodeJs 版本 | windows? | nvm on |
nvm off | 关闭 NodeJs,此时系统环境不存在 NodeJs | windows? | 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 |
除了通过 NVM 自带的命令进行安装之外,用户其实可以自行手动安装,这种情况非常适合在没网络,只能使用离线资源的情况下。
在讲解如何手动安装之前,先来了解一下 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镜像源地址
1)、下载对应版本安装包
在 Node 官网 下载地址上,可以看到 NodeJs 各版本下载入口都在这,其中偶数版本均为受到长期支持的 LTS 稳定版本,建议下载并使用 LTS 版本。需要注意的是,需要在 NVM 上使用并不是需要一个安装程序,而是对于 NodeJs 的执行文件,请下载这些文件的压缩包。
特殊版本可在国内镜像源下载。
2)、在 NVM 目录下创建以版本命名的文件夹
将下载下来的文件解压,并丢入NVM 目录下创建以版本命名的文件夹中,文件夹名称与其他版本命名规则保持一致,别忘记带个 v 前缀。
3)、验证所安装版本的 NodeJs
在 NVM 中列出版本列表,并切换至手动安装的版本,检查是否正确安装,至此就大功告成。
# 列出 NodeJs 版本
nvm ls
# 以14.21.3版本为例进行验证
nvm use 14.21.3
node --version & npm --version
在 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版本。
npm
不是内部或外部命令,也不是可运行的程序或批处理文件。
检查一下版本库中文件是否完整,如果不完整尝试重新安装该版本,实在不行手动去node官方下载所需版本存放到NVM版本库中。
🍅因发布平台差异导致阅读体验不同,源文贴出:《NVM 管理Node多版本通关宝典》