node 多版本切换的实现方案及nvm的使用

7,066 阅读6分钟

最近换了家公司,配备的新电脑需要重新配置开发环境,正好也趁着这个时候,做一个总结归纳。

一、背景

由于node.js和npm版本更新迭代很快,一些npm包或者我们项目依赖的node和npm版本不同,会导致我们需要安装对应的node版本,由于卸载再重装node的操作相对繁琐,我们需要一个可安装多个node版本并实现切换的方案。

二、方案1:配置多个环境变量,通过切换环境变量的方式切换node版本

1、卸载node

如果未安装node,则无该步骤,若已经安装某版本node,则需要卸载对应node

  • 如果是使用node安装包(.msi)安装过,则执行以下操作

    1. 进入控制面板-找到程序功能-选择node-执行卸载
    2. 删除node相关的文件
    C:\Program Files (x86)\Nodejs
    C:\Program Files\Nodejs
    C:\Users\{User}\AppData\Roaming\npm(或%appdata%\npm)
    C:\Users\{User}\AppData\Roaming\npm-cache(或%appdata%\npm-cache)
    C:\Users\{User}\.npmrc(并且可能检查没有.前缀的那个)
    C:\Users\{User}\AppData\Local\Temp\npm-*
    

    3. 删除环境变量中的node和npm相关引用 4. 重启任务管理器杀死所有相关进程(或者重新启动,最快)

2、下载多个node绿色安装包

直接下载node绿色安装包,我一般在node大版本8、10、12中各选一个稳定的版本,我下载的分别是node-v8.17.0-win-x64..zip、node-v10.22.1-win-x64.zip、node-v12.19.0-win-x64.zip

3、配置系统变量

  • 在系统变量中配置 node_8、node_10、node_12三个变量,地址分别指向对应版本的node绿色安装包

  • 在系统变量中设置变量node_global,值指向我们上一步定义的某一个node版本的变量

  • 在系统变量path后面添加变量 %node_global%

  • 命令行修改系统变量(由于path中的node路径未生效,所以目前都是手动更改node_global的值)

// 命令行修改系统变量
set node_global=%node_10%
echo %node_global%  //当前node_global 地址

echo %path%  //当前path地址

  • 命令行修改系统变量只在当前cmd窗口生效

三、方案2 : 使用nvm实现多版本node切换

注意 :

1、nvm 安装到了有空格的路径上(例如 D:\Program Files),切换 node 版本会 出现“exit status 1...”报错,因此各位安装时需要注意!

2、安装1.2.2版本的nvm 时,发现下载14以下的node版本,npm下载失败,因此切换至1.1.10版本

1、卸载已有的node

2、、下载nvm-windows安装包

nvm下载地址 :github.com/coreybutler…

3、安装

nvm-setup 程序安装步骤

  • 解压 nvm-setup.zip,,双击nvm-setup.exe安装,

  • 设置nvm安装目录,默认路径C:\Users\wangyue\AppData\Roaming\nvm,这里我加到D盘 image-20250520135928737.png

  • 设置node的安装路径,默认路径:C:\Program Files\nodejs,这里我加到D盘 image-20250520140400746.png

  • 安装成功后,输入nvm -v,输出版本号则安装成功

nvm-setup绿色免装版

  • 新建nvm放置当前使用的node存放路径
//nvm 路径
D:\ProgramSelfFiles\nvm
// nvm放置当前使用的node存放路径
D:\ProgramSelfFiles\NodeJs
  • 新建两个系统变量
NVM_HOME : D:\ProgramSelfFiles\nvm  // 指向nvm.exe
NVM_SYMLINK : D:\ProgramSelfFiles\NodeJs  //指向node.exe

image-20250520140706639.png

  • 在系统变量path中增加%NVM_HOME%;%NVM_SYMLINK%;

root: D:\ProgramSelfFiles\nvm  //nvm地址 存放多种版本node
path: D:\ProgramSelfFiles\NodeJs  //存放当前使用node
arch: 64  //表示安装的node是多少位
proxy: none  //设置代理

注意 : nvm安装或者切换版本的时候,不能自动识别操作系统适合哪个版本的node,所以最好自己安装是进行声明

4、nvm 设置淘宝镜像

node_mirror是更改nvm下载node时的镜像,不设置则默认nodejs.org/dist/

npm_mirror是更改npm下载依赖包的镜像,不设置则默认github.com/npm/npm/arc….

  • 方法一,使用cmd命令
nvm node_mirror: https://npm.taobao.org/mirrors/node/
nvm npm_mirror: https://npm.taobao.org/mirrors/npm/
  • 方法二,修改setting.txt
//setting.txt
node_mirror: https://npm.taobao.org/mirrors/node/  
npm_mirror: https://npm.taobao.org/mirrors/npm/

5、nvm切换node版本

  • 使用nvm list available;查看可安装的node版本

  • 使用nvm install [version] 安装对应版本的node;我下载了8.17.0、10.22.1、12.19.0三个版本

  • 使用nvm use [version] 切换指定版本 在这里,我出现了“exit status 1...”报错,原因是我把nvm安装到了有空格的路径上(D:\Program Files),导致切换失败,切换至没有空格的路径上即可,放入需要重新配置系统变量以及setting.text了

6、nvm相关命令说明

nvm install 安装最新版本nvm
nvm version/nvm current 查看当前nvm的版本
nvm list available:查看可安装的node版本
nvm list/nvm ls 查看已经安装的版本
nvm install <version>  安装特定的node版本
nvm uninstall <version> 卸载特定的node版本
nvm use <version> ## 切换使用指定的版本node
nvm use [version] [arch] 切换制定的node版本和位数
nvm reinstall-packages <version> ## 在当前版本node环境下,重新全局安装指定版本号的npm包


nvm on 打开nodejs控制
nvm off 关闭nodejs控制
nvm alias <name> <version> ## 给不同的版本号添加别名
nvm unalias <name> ## 删除已定义的别名
nvm proxy 查看设置与代理
nvm node_mirror [url] 设置setting.txt中的node_mirror,如果不设置的默认是 https://nodejs.org/dist/
nvm npm_mirror [url]设置setting.txt中的npm_mirror,如果不设置的话默认的是: https://github.com/npm/npm/archive/.
nvm root [path] 设置和查看root路径

7、nvm 下 node 全局组件下载地 node_global、node_cache 管理

npm 全局模块的存放路径以及 cache 的路径的配置,一般默认在 C:\Users\Administrator\AppData\Roaming\npm;为方便管理,可自定义配置任意目录;由于日常开发中,node 版本对部分组件会有版本影响(例如 node-sass),因此全局组件的安装目录同时设置了针对所有 node 版本的全局组件安装目录和针对对应 node 版本的全局组件安装目录

针对 nvm 所有 node 版本的安装目录配置

与 node 版本基本无影响的全局组件,我选择存放在至 nvm 目录,在环境变量中配置,可在任意 node 版本中生效

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

配置全局插件环境变量,在 path 中添加指向地址 D:\ProgramSelfFiles\nvm\node_global,由于前面已经设置路径变量,所以可以直接拼接 %NVM_HOME%\node_global

npm-global-config.png

针对 nvm 特定 node 版本的安装目录配置

与 node 版本可能有版本影响的全局组件,下载至当前 node 目录,在各自 node 版本中生效

npm config set prefix "D:\ProgramSelfFiles\nodejs\node_global"
npm config set cache "D:\ProgramSelfFiles\nodejs\node_cache"

配置特定 node 版本全局插件环境变量,在 path 中添加指向地址 D:\ProgramSelfFiles\nodejs\node_global,由于前面已经设置路径变量,所以可以直接拼接 %NVM_SYMLINK%\node_global

npm-global-config-spec.png

8、nrm(npm registry manager ) -- npm的镜像源管理工具

关于淘宝镜像,介绍一个镜像源管理工具,可以快速的切换npm的镜像源

  • 全局安装nrm
npm install -g nrm
  • 查看nrm 所有的镜像源地址 nrm ls;带*号的是当前使用源

image

  • 切换镜像源 nrm use [registry]

切换淘宝镜像源

image

  • nrm 命令
nrm -h /nrm -help  // 列出nrm的相关命令、信息
nrm -V             // nrm版本
nrm ls             // 列出nrm所有的镜像源地址
nrm current        // 当前使用镜像源

nrm use <registry> // 使用某个镜像源
nrm add <registry> <url> [home]   //增加镜像源;registry镜像源名;url 镜像源地址
nrm del <registry>  // 删除对应的源。
nrm test <registry>  //测试镜像源下载响应时间