NVM安装随记

167 阅读4分钟

前言

周末在家安装node环境,为了方便兼容公司和家里电脑的node环境,于是准备使用node版本管理器——nvm,想到之前安装时遇到了一些问题,于是这次也一并记录。

安装环境

  • Windows 10系统
  • nvm-setup(v1.11.1)
  • ...

nvm安装流程

下载nvm安装程序

下载地址:github.com/coreybutler…
获取安装包

安装前置流程

  1. 安装前本地已存在nodejs
    1.1 可选择先删除已安装的nodejs,无安装nodejs的可忽略
    1.2 可选择保留已安装的nodejs,在安装nvm过程中会提示是否将已存在的nodejs交由nvm管理,选择【是】即可

  2. nvm安装路径
    2.1 选择的路径可以不用在系统盘(如C盘),可以选择其他硬盘
    2.2 建议预先创建好文件夹,将后续安装nvmnodejs路径都设置在这个文件夹下
    2.3 路径上不能存在空格,如Program Files是不允许的,会导致安装失败

执行安装

  1. 打开安装程序
    打开安装程序

  2. 选择nvm安装位置
    选择nvm安装位置

  3. 选择nvm对应nodejs版本的安装位置
    选择nvm对应nodejs版本的安装位置
    选择nvm对应nodejs版本的安装位置2

  4. 系统变量设置
    系统变量设置 等待安装成功后,系统变量内出现了相应的路径(可能跟nvm-setup版本有关)
    NVM_HOME是指nvm相关的文件存储的文件夹 NVM_SYMLINK是指nvm安装nodejs所在的文件夹的软链(真实node文件夹在NVM_HOME目录下)

  5. 检验nvm版本
    检验nvm版本
    打开cmd,普通模式(对应用户的环境变量有上述两个路径时)或者管理员模式,然后输入nvm -v,如果显示对应版本,即是安装成功

nvm安装多个nodejs

安装&切换多个nodejs版本

  1. 安装nodejsnpm
nvm install <version>

安装指定nodejs版本,会将对应的npm一并下载至NVM_HOME目录下 如果下载失败,请检查环境变量下的两个路径——NVM_HOMENVM_SYMLINK,不能出现空格
如果是NVM_HOME出现空格,需要删除重装nvm

  1. 切换node版本
nvm use <version>

2.1 如果出现以下的乱码报错

exit status 1: 'D:\NodeJS\' (后面是乱码)

一般是nodejs安装路径,即${NVM_HOME}/<version>下有空格,此时需要删除重装nvm,并保证路径不能有空格
2.2 如果出现以下的报错
nvm use 报错
可能是无权限
(1)用户无权限,需要使用管理员方式打开cmd,再运行命令
(2)如果是在公司电脑上操作,可能出现cmd/powerShell的权限被禁止,需要打开权限,参考这篇文章,主要操作是

set-executionpolicy remotesigned

在非NVM_HOME路径下安装nodeJS

如果比较刁钻点,不在NVM_HOME下安装node,那么在使用nvm use <version>时,会出现类似以下的报错

exec: "D:\\nodejs\\elevate.cmd": file does not exist

解决方法:将NVM_HOME文件夹下的内容复制到新的root路径(如文中的D:\nodejs\)下,运行命令即可成功

切换使用多个nodejs

完成以上步骤后可以使用nvm来管理nodejs,通过cmd命令
切换使用多个nodejs

nrm报错解决

由于公司和家里的电脑,下载npm包的源可能不一样,所以需要安装nrm来管理下载源
但是如果通过,以下命令

npm install nrm -g

安装的全局nrm,此时默认安装最新版,但是会出现以下报错

internal/modules/cjs/loader.js:1131
      throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
      ^

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/muki/.nvm/versions/node/v14.21.3/lib/node_modules/nrm/node_modules/open/index.js
require() of ES modules is not supported.
require() of /Users/muki/.nvm/versions/node/v14.21.3/lib/node_modules/nrm/node_modules/open/index.js from /Users/muki/.nvm/versions/node/v14.21.3/lib/node_modules/nrm/cli.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /Users/muki/.nvm/versions/node/v14.21.3/lib/node_modules/nrm/node_modules/open/package.json.

    at new NodeError (internal/errors.js:322:7)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1131:13)
    at Module.load (internal/modules/cjs/loader.js:979:32)
    at Function.Module._load (internal/modules/cjs/loader.js:819:12)
    at Module.require (internal/modules/cjs/loader.js:1003:19)
    at require (internal/modules/cjs/helpers.js:107:18)
    at Object.<anonymous> (/Users/muki/.nvm/versions/node/v14.21.3/lib/node_modules/nrm/cli.js:9:14)
    at Module._compile (internal/modules/cjs/loader.js:1114:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1143:10)
    at Module.load (internal/modules/cjs/loader.js:979:32) {
  code: 'ERR_REQUIRE_ESM'
}

这种情况是因为open库的更新导致,具体可看对应项目的说明
解决方式是全局安装低于8.4.2版本的open

npm install -g open@8.4.2 --save

结语

以上就是安装nvm,以及过程中遇到问题和解决方法的总结,后续也会在这里补充nvm安装的经验。