以下为本人在踩坑并百度未解决问题后,摸索出来的答案,不一定对,仅做参考
问题描述
主要问题是按教程安装nvm ,然后配置环境变量(如果你的nvm命令无效才配),然后install nodejs ,然后按提示输入use [node版本号] ,结果node命名和npm一个或两个都无法在命令行中被识别成可执行的命令,但是nvm安装录存在nodejs对应的版本名的文件夹
解决
先尝试用管理员运行nvm命令,大概率可以解决,没有解决或者对这个原理有点兴趣的可以继续看,但是以下都是我自己结合操作结果实际情况的反推分析,没有百度,不是大佬,不保证正确,有懂的可以下面直接上课讲一讲。
思路
首先命令无法识别基本是环境变量没有配置的问题,我最开始也是直接按照直接安装nodejs的方法添加了被nvm下载在nvm安装目录下的nodejs的环境变量,这样node命令肯定是能用,但是无法切换版本,脱离了nvm管理node版本的初衷(这样解决还不如直接安装nodejs)
上面是nvm安装文件夹 v-*是 nvm install 命令下载的nodejs
文件夹中有一个setting.txt文件,打开如图
这是我改过之后的设置,正常来讲初始的设置,path: C:Program Filesnodejs 是一个快捷方式文件, root是nvm安装目录。
从实际情况来看,这是一个初始化配置,**nvm会将这两个路径添加到系统变量和用户变量,命名分别NVM_HOME和NVM_SYMLINK ,**前者是nvm命令生效的配置,值是setting文件的root值,后者就是path值,因为初始时c盘的应该是没有C:Program Filesnodejs这个快捷方式,所以你在nvm use的时候会创建这个快捷方式,而这个操作一般需要管理员权限,直接打开cmd而不是管理员方式打开就可能会导致创建失败,而nvm use的逻辑大概是创建这个快捷方式,指向你指定的那个版本的nodejs文件夹,也就是第一章图的的v-*文件夹,而这个快捷方式在系统变量里面已经配置了,所以可以全局访问到快捷方式指向的文件夹下的命令(也就是node和npm),nvm use 会切换这个快捷方式指向的文件夹,也就达到了切换版本的效果
简单来讲就是nvm将一个快捷方式注册到系统变量,并动态改变这个快捷方式指向的nodejs的文件夹,实现版本切换,原理上还是把nodejs的安装路径注册到系统变量,但是是间接地通过一个快捷方式来注册,类似于网络中的路由代理。