除非添加 .exe 扩展名,否则 Node 不会从 cmd 运行

除非添加 .exe 扩展名,否则 Node 不会从 cmd 运行

所以这是非常奇怪的。首先我要说的是,以前一切都很好。

几天前我安装了 Node,完成后我打开了一个命令提示符(在 Windows 10 上),我输入了node --version它并返回了当前安装的版本。

从那时起,我就需要两个不同的 Node 版本,以便可以在它们之间切换。这时,我们就要用到我们的主角 NVM。因此,我安装了 NVM,设置了 nvm 安装路径,C:\nvm然后运行命令来安装我需要的不同版本的 Node。

使用 nvm 命令nvm use X.XX.XX,将 X 替换为版本号,似乎可以工作,因为它会创建符号链接并通过链接指向正确的文件。这意味着如果我手动转到符号链接并单击它,我将进入 Node 安装文件夹,所以我知道符号链接正在工作。

暂时忽略符号链接,如果我从节点安装位置打开命令提示符,c:\nvm\v16.0.0例如我可以运行node --version,它将正确返回版本。

  • 注意:我没有在节点调用的末尾添加 .exe
C:\nvm\v16.0.0>node --version
v16.0.0

事情开始变得有点奇怪了。如果我更新环境变量 PATH 以添加条目c:\nvm\16.0.0,然后运行,node --version就会出现以下错误。

C:\>node --version
The system cannot find the path specified

令我困惑的是,如果我仅添加.exe,那么一切都正常吗???

C:\>node.exe --version
v16.0.0

我已经检查过.exe 是否在PATHEXT环境变量中。

在此处输入图片描述

运行其他 exe 工作正常。我可以notepad在命令提示符中输入,它就可以正常打开一个新实例。

我真的不知道该怎么做了。我已经卸载、重新安装、重新启动、关闭、删除所有环境变量、添加所有环境变量、创建自己的 EXE 等等。一切都正常,除了 Node 需要先用其扩展名调用才能执行,是的……我确实检查过只有一个名为 node 的文件,它不会混淆 exe 和 bat 文件

文件夹结构

非常感谢大家的帮助。谢谢!

答案1

我想我无意中找到了答案。运行后where node得到了以下输出。

C:\Users\jacquesr>where node 
C:\Users\jacquesr\AppData\Roaming\npm\node   
C:\Users\jacquesr\AppData\Roaming\npm\node.cmd   
C:\Program Files\nodejs\node.exe  

这让我开始思考......也许它不知道使用哪个版本。.cmd或者.exe

所以我所做的就是将该目录中任何对节点的引用移动到名为的新文件夹中old node 旧节点 然后where node又跑了......看起来好多了

C:\Users\jacquesr>where node
C:\Program Files\nodejs\node.exe

最后运行node --version

C:\Users\jacquesr>node --version
v16.0.0

因此测试使用 NVM 交换版本,并且确实如此。

C:\WINDOWS\system32>node --version
v16.0.0

C:\WINDOWS\system32>nvm list

     21.1.0
     16.20.0
   * 16.0.0 (Currently using 64-bit executable)
  
C:\WINDOWS\system32>nvm use 21.1.0
Now using node v21.1.0 (64-bit)

C:\WINDOWS\system32>nvm list
   * 21.1.0 (Currently using 64-bit executable)
     16.20.0
     16.0.0
     
C:\WINDOWS\system32>node --version
v21.1.0

如果您愿意的话,感谢您花时间查看这个问题...我想我会分享我是如何发现这个问题的,以便其他人可以节省一些时间。

相关内容