无法在 PowerShell 中调用 npm,即使它在系统路径中

Cannot invoke npm in PowerShell, even though it is in the system's path

这是我的路径:

PS> $Env:Path
C:\Python27\;C:\Python27\Scripts;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;D:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;D:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server0\Tools\Binn\;D:\cmder;C:\ProgramData\chocolatey\bin;C:\Program Files\Git\cmd;C:\Users\caio1\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\caiodomingos\.nvm\versions\node\v10.16.3\bin;C:\Users\caio1\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\caiodomingos\.nvm\versions\node\v10.16.3\lib;D:\Program Files\nodejs\;C:\Users\caio1\AppData\Local\Microsoft\WindowsApps;%NVM_HOME%;%NVM_SYMLINK%;C:\Program Files\Java\jdk1.8.0_221\bin;C:\gradle;C:\android-sdk\tools\bin;;C:\Users\caio1\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\caio1\AppData\Roaming\np

请注意以下与 NodJS 相关的条目,按顺序排列:

C:\Users\caio1\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\caiodomingos\.nvm\versions\node\v10.16.3\bin
C:\Users\caio1\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\caiodomingos\.nvm\versions\node\v10.16.3\lib
D:\Program Files\nodejs\

但是当我输入 npm -v 时, Powershell 抛出此错误:

Program 'npm' failed to run: No application is associated with the specified file 
for this operation.
At line:1 char:1
+ npm
+ ~~~.
At line:1 char:1
+ npm
+ ~~~
    + CategoryInfo          : ResourceUnavailable: (:) [], ApplicationFailedException
    + FullyQualifiedErrorId : NativeCommandFailed

tl;博士:

  • 两者之一:从您的 $env:PATH 变量中删除以下条目。
C:\Users\caio1\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\caiodomingos\.nvm\versions\node\v10.16.3\bin
C:\Users\caio1\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\caiodomingos\.nvm\versions\node\v10.16.3\lib
  • :调用npm作为npm.cmdnode作为node.exe

您的症状暗示如下:

  • 您的 $env:PATH 变量中有一个目录包含名为 just npm - without 的文件文件扩展名...

  • 该目录不包含具有相同但可执行文件的文件文件扩展名 ,例如 .cmd.exe...

  • 该目录在 $env:PATH第一个 列出,在 [=] 的任何其他目录之前12=] 文件 具有 可执行扩展名,例如 npm.cmd, ...

在 Windows 上的正常 NodeJS 安装中(默认安装在 $env:ProgramFiles\NodeJs 中),安装文件夹包含一个 npm.cmd 用于调用 npm 的批处理文件,以及一个 Unix [=112] =] 脚本在同一文件夹中,仅命名为 npm - 没有文件扩展名 .

npm.cmd 优先于无扩展名 npm,因此仅调用 npm 会按预期工作。

C:\Users\caio1\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\caiodomingos\.nvm\versions\node\v10.16.3\bin 是包含 Linux NodeJs 安装的目录。

在Linux安装中,显然不需要批处理文件,所以只需要一个无扩展名npm Unix shell 脚本存在。

由于此目录在 $env:PATH 值中 您的常规 NodeJS 安装目录 (D:\Program Files\nodejs) 之前,PowerShell 尝试调用无扩展的 Unix shell 脚本,当您提交 npm 时,可预见的是,它会失败。

具体来说,因为 npm 文件没有 可执行文件 文件扩展名,PowerShell 将其作为 文档 而不是作为可执行文件,但未能这样做,因为没有应用程序注册到 Windows(图形)shell(文件资源管理器)以打开没有文件扩展名的文档。