【问题标题】:Cannot invoke npm in PowerShell, even though it is in the system's path无法在 PowerShell 中调用 npm,即使它位于系统路径中
【发布时间】:2020-02-18 17:05:38
【问题描述】:

这是我的路:

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 Server\130\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

【问题讨论】:

  • 作为基本问题,npm 是否安装在上述任何路径中?在我的简短搜索中,默认文件夹应该是 C:\Program Files\nodejs\node_modules\npm,但路径变量中只有 D:\Program Files\nodejs。
  • @OlafReitz:不,C:\Program Files\nodejs(或等效项)是正确的 PATH 条目; npm.cmd 位于该文件夹中。

标签: node.js windows powershell npm path-variables


【解决方案1】:

tl;dr

  • 任一:从您的 $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
  • :调用npmnpm.cmdnodenode.exe

您的症状意味着以下几点:

  • 您的$env:PATHvariable 中有一个目录,其中包含一个名为只是 npm 的文件 - 没有文件扩展名...

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

  • 并且该目录在$env:PATH 中列在第一个,在npm 文件带有 可执行扩展名的任何其他目录之前, 如npm.cmd, ...

在 Windows 上的普通 NodeJS 安装中(默认安装在 $env:ProgramFiles\NodeJs 中),安装文件夹包含一个用于调用 npm 的 npm.cmd 批处理文件,以及位于同一文件夹中的一个 Unix shell 脚本,名为 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 是一个目录,其中包含 NodeJs 的 Linux 安装。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2020-07-09
    • 2022-08-02
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多