以下为本人在踩坑并百度未解决问题后,摸索出来的答案,不一定对,仅做参考
问题描述
主要问题是按教程安装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的安装路径注册到系统变量,但是是间接地通过一个快捷方式来注册,类似于网络中的路由代理。
那么这个 C:Program Filesnodejs 创建失败就是node命令无效的原因,他初始配置需要在c盘创建这个文件,那么未用管理员方式运行大概率会导致这个创建失败,(至少我发现的时候,我确实没有看到这个文件,也就是没有被创建)(反转是后面我先用管理员方式运行nvm发现可以,然后为了验证上面一套分析我把这个快捷方式先删除了,再在普通用户权限先运行,nvm use的时候windows11向我请求了管理员授权,就是一个中间的弹窗,选是和否,大家安装软家是经常看到,但是我第一次运行的时候并没有请求,可能就是这里导致创建失败)
综上,如果node命名无效,那就检查我刚刚提到的快捷方式是否创建成功,系统变量中否存在NVM_HOME和NVM_SYMLINK 这两个值,创建失败也不建议手动创建,用管理员身份运行nvm。
如果还是创建失败,那就尝试修改快捷方式的创建位置,放在不用权限的目录下。
而我尝试修改setting文件,让这个快捷方式创建在不需要权限的d盘,打算实现普通用户也可以运行,但是失败,还是创建在c盘,也就是默认初始路径,推论:setting文件只是初始化配置,不是类似于.conf 文件的动态配置,最终发现直接修改系统变量 NVM_SYMLINK 的值可以让nvm把快捷方式建在你想要的位置
这样快捷方式就创建在指定目录下,我这里是nvm安装目录,便于管理
第一个就是那个nodejs快捷方式,点击进入,在此目录运行cmd ,执行node -v,发现就是nvm use 指定的版本,nvm use 不同版本 ,点击快捷方式后跳转的文件夹会跟着切换,也就是实现了版本切换 。
比较懒,对于一些可以验证的推论并没有验证,只能说逻辑上基本通,大家有兴趣可以执行验证。
原文地址:https://blog.csdn.net/DMMAX/article/details/129136620
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_36690.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!