Windows版NVM安装Node问题

为了方便切换不同的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版本时已经正常了。

相关推荐
IT_陈寒2 小时前
Vite这个坑我帮你踩了,动态导入居然这样才生效
前端·人工智能·后端
swipe2 小时前
Mem0 x Agent 实战系列:分层记忆 + 三路召回,搭建真正可用的长期记忆层
前端·javascript·面试
鹤鸣的日常2 小时前
前端运行时动态环境变量方案
前端·react.js·docker·前端框架·vue·gitlab
Lee川2 小时前
Event Loop 面试通关:从原理到口述再到实战
前端·面试
kyriewen3 小时前
手写 call、apply、bind:从原理到实现,附 3 个最容易忽略的边界情况
前端·javascript·面试
用户2181697049303 小时前
swift (三) 枚举 结构体 类
前端
胡萝卜术3 小时前
从内存视角重新认识 JavaScript 数据类型:一份深度学习笔记
前端·javascript·面试
IVEN_3 小时前
记一次诡异的前端白屏故障:Nginx Proxy Cache 内存缓存"幽灵"事件
前端·nginx
如果超人不会飞3 小时前
TinyRobot SuggestionPills紧凑的建议按钮组组件
前端·vue.js
如果超人不会飞3 小时前
TinyRobot Container构建优雅的AI对话容器
前端·vue.js