为了方便切换不同的Node版本,我们经常使用Nvm对Node进行管理。最近,发现一个组员在使用nvm切换Node时报错,最后排查完之后才发现,此次发现的问题有别于往常,特意记录一下,仅供大家参考。
问题1: 没有卸载原有的Node就安装Nvm
遇到的第一个问题就是看到没有卸载原有安装的Node,于是立即让其卸载Node,删除环境变量,卸载Nvm后重新安装,Node卸载及Nvm安装的教程网上一搜一大把,大家参考即可。
问题2:安装Nvm后没有生成Node目录的软连接(重点)
首先,这里要了解一个概念符号链接(Symbolic Link),也有人称为软链接,玩过Linux的同学应该比较清楚。
符号链接(symbolic link)是 Linux 系统中的一种文件,它指向系统中的另一个文件或目录。符号链接类似于 Windows 系统中的快捷方式。
软链接和硬链接的区别软链接类似于快捷方式,它可以指向任意文件系统中的一个文件或目录。 硬链接也可以看作是文件或目录的快捷方式,但是无法在两个不同文件系统之间创建硬链接。 我们将会学习如何创建及删除符号链接,还会了解什么是失效链接,以及如何删除它们。
其实,我们在安装Nvm的过程中,就会选择Node的符号链接目录,如下图所示:
Nvm中,可以认为这个符号链接目录就是我们当前正在使用的Node的目录的映射,如果有兴趣的话,可以在切换Node版本的时候看一下这个目录里面的文件。
在绝大部分人安装Nvm的过程中,这里都是没有问题的,但是偏偏这个哥们在安装Nvm的时候,所有步骤正常,但是在安装完成之后,刚刚创建的符号链接目录会自动删除,Nvm能正常安装Node,但不能切换。这种情况,最先想到了权限问题,果然,这哥们的电脑竟然用的不是系统管理员的账号,于是一顿操作赋权限,结果没啥用,改用超管用户登录,重新安装后依然是同样的问题。搞了一通,没有解决,于是再换一种思路,既然系统自动安装时,符号链接的目录会自动删除,那我手动创建,只要链接存在,切换Node时应该就可以把符号链接的指向变更。
符号链接
对文件创建符号链接
shell
mklink "link" "target"
对文件夹创建符号链接
shell
mklink /D "link" "target"
上面提到,Nvm能正常安装Node,不能切换版本;此时,我们先安装一个Node版本,比如16.20.0,这个时候我们利用上面的命令手动创建一个软连接目录,示例如下:
其实,这条命令的执行可以认为是手动执行了第一张图中的动作。执行完命令后,确实已经创建了一个符号链接目录,这个目录下的内容和D:\nvm\v16.20.0目录下的内容完全一样。
此时,利用Nvm安装一个其他版本的Node,再用Nvm切换Node版本时已经正常了。