1. 问题
已知,nvm为每一个已安装node都分配了一个目录,他们互相独立(包括其下安装的全局包)
使用
nvm use xxversion
切换版本的时候,我们并没有手动去切换node环境变量路径,nvm是如何保证我们使用的正确版本的node、正确的npm包 ??
2. 猜想
切换版本时, nvm直接帮我们把环境变量改写了?
3. 验证
3.1 手动验证
多次调用nvm use
命令,发现环境变量中的地址并没有发生改变,如下图 👇
其实看到NVM_SYMLINK
这个名字时,大概有了答案,环境变量中存的是一个软连接,该软连接指向真实node安装目录;
比如:我现在node版本为V18.20.5,那么我访问C:\Program Files\nodejs
时,实际上访问的是C:\Users\xxxxx\AppData\Roaming\nvm\v18.20.5
;同理,当我用nvm切换成V16.15.0,访问C:\Program Files\nodejs
则会跑到C:\Users\xxxxx\AppData\Roaming\nvm\v16.15.0
3.1 nvm实现细节
4. 结论
nvm通过更改软连接的指向,告诉系统/用户现在正在使用的NodeJS版本