前言
周末在家安装node环境,为了方便兼容公司和家里电脑的node环境,于是准备使用node版本管理器——nvm,想到之前安装时遇到了一些问题,于是这次也一并记录。
安装环境
- Windows 10系统
- nvm-setup(v1.11.1)
- ...
nvm安装流程
下载nvm安装程序
安装前置流程
-
安装前本地已存在
nodejs
1.1 可选择先删除已安装的nodejs,无安装nodejs的可忽略
1.2 可选择保留已安装的nodejs,在安装nvm过程中会提示是否将已存在的nodejs交由nvm管理,选择【是】即可 -
nvm安装路径
2.1 选择的路径可以不用在系统盘(如C盘),可以选择其他硬盘
2.2 建议预先创建好文件夹,将后续安装nvm和nodejs路径都设置在这个文件夹下
2.3 路径上不能存在空格,如Program Files是不允许的,会导致安装失败
执行安装
-
打开安装程序
-
选择nvm安装位置
-
选择nvm对应nodejs版本的安装位置
-
系统变量设置
等待安装成功后,系统变量内出现了相应的路径(可能跟
nvm-setup版本有关)
NVM_HOME是指nvm相关的文件存储的文件夹NVM_SYMLINK是指nvm安装nodejs所在的文件夹的软链(真实node文件夹在NVM_HOME目录下) -
检验nvm版本
打开cmd,普通模式(对应用户的环境变量有上述两个路径时)或者管理员模式,然后输入nvm -v,如果显示对应版本,即是安装成功
nvm安装多个nodejs
安装&切换多个nodejs版本
- 安装
nodejs和npm
nvm install <version>
安装指定nodejs版本,会将对应的npm一并下载至NVM_HOME目录下
如果下载失败,请检查环境变量下的两个路径——NVM_HOME和NVM_SYMLINK,不能出现空格
如果是NVM_HOME出现空格,需要删除重装nvm
- 切换node版本
nvm use <version>
2.1 如果出现以下的乱码报错
exit status 1: 'D:\NodeJS\' (后面是乱码)
一般是nodejs安装路径,即${NVM_HOME}/<version>下有空格,此时需要删除重装nvm,并保证路径不能有空格
2.2 如果出现以下的报错
可能是无权限
(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命令
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安装的经验。