文章目录
nvm切换过程导致的问题,本文详细讲解;
一、环境变量
1.1 用户变量、系统变量
- 用户变量:用户设置的变量,在本次登录的用户环境可以生效(用户就是可用账号密码登录,一般私人电脑默认admin不区分用户)
- 系统变量:本电脑环境变量,在这个电脑的所有用户都能生效;
- 冲突:变量在两边重复,谁更优先?普通变量用户优先,path变量字符串拼接,取先出现的地址,那么也是用户优先;

1.2 软链接
- 普通变量:用来存储某个地址(文件夹位置)
- 软链接:把普通变量的值取出来

二、指令
2.1 node -v 执行过程
- shell 拿到 “node” 这个命令名
- 判断是不是内置命令(cd、dir…)→ 否
- 遍历 PATH,逐项找匹配的可执行文件(如.exe)
- 找到第一个 → 执行它,把 “-v” 作为参数传进去
- 都没找到 → 报错 “不是内部或外部命令”
- C:\Program Files\nodejs在path里,这里就可以用这个路径找到文件夹下的node.exe,并执行
2.2 可执行文件
- 可执行文件:PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;…(有优先顺序)
- 在某一条path路径下,先筛选名称为node的可执行文件(可能多个),再用扩展名排序,取最优先的那个执行
三、NVM
3.1 nvm切换
- 切换:nvm use 20,将把%NVM_SYMLINK%位置的文件信息修改为node20的执行文件
- 访问:重新访问的时候,通过这个链接找到node20
- 链接目录?C:\Program Files\nodejs作为一个链接目录,nvm use将改写路径重定向(源文件并未发生改变,只在目录层转发)

查看目录是否存在软链接:Get-Item “C:\Program Files\nodejs” | Select-Object LinkType, Target

3.2 node20在哪
- nvm i version下载的node版本都保存在nvm目录下

四、npm
4.1 npm全局包
- 切换node版本,全局包的位置也在变化,默认是跟随nvm某个node下的全局包node_modules
- 固化全局包:将全局包固化并共享,npm config set prefix “C:\Users\Administrator\AppData\Roaming\npm”;后续所有-g安装的代码会在这个文件夹里;
- 查看位置;npm config get prefix查看全局包位置;

4.2 npm位置
- npm依赖于node,只要设置好node的环境变量,就能通过node同层级的npm.cmd入口文件找到真正的执行文件;


4.3 npm-v
- 全局包访问?需要设置全局包目录环境变量C:\Users\Administrator\AppData\Roaming\npm(如pnpm、yarn),此时有个问题,该目录下也有npm,会和node自带的npm冲突;解决方案:node环境变量靠前(%NVM_SYMLINK%),全局包环境变量靠后


五、综合结论
用户:普通变量

用户:Path

系统变量:不用改
- 全局包固定位置:npm config set prefix “C:\Users\Administrator\AppData\Roaming\npm”
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/hole_diss/article/details/167398511





