全局NPM包已安装但找不到命令

62
我已经通过命令行全局安装了两个npm包"download""enigmavirtualbox"npm install -g downloadnpm install -g engimavirtualbox 我试图在批处理文件中使用它们来从我的node项目打包一个单独的.exe文件。对于这两个包,命令npm list -g <packagename>都可以输出相应的版本信息,与当前工作目录无关。
然而,在我的批处理脚本内,"download"和"enigmavirtualbox"这两个命令无法找到。
运行npm root -g会得到C:\Users\<username>\AppData\Roaming\npm\node_modules,并且在该文件夹内我可以看到这两个包的文件夹。
我尝试过:
  • 按照这里所述更改npm root
  • 卸载并重新安装软件包
  • 添加环境变量NODE_PATH,指向C:\Users\<username>\AppData\Roaming\npm\node_modules
  • C:\Users\<username>\AppData\Roaming\npm\node_modules添加到PATH环境变量中

同样的设置在我的第二台电脑上也能工作(两台电脑都运行Win7 64位)。我的node安装有问题吗,还是我做错了什么?


https://github.com/npm/npm/wiki/Troubleshooting#upgrading-on-windows - user3025289
8个回答

87

可执行二进制文件和 .cmd 文件最终会出现在 C:\Users\<username>\AppData\Roaming\npm 中(末尾没有 node_modules),因此将该路径添加到 PATH 环境变量中可以解决此问题。

使用环境变量时,路径可以缩写为:%appdata\npm


30
可以这样做,不过使用通配符 %USERPROFILE%\AppData\Roaming\npm 或许更好。这行代码必须放在路径环境变量中任何 npm、node 或 nodejs 路径之前,以便 npm 可以适当地找到您的全局包。 - Watchmaker
我已经创建了自己的节点 package.json 并从那里运行了 npm install -g(我还没有发布它,因为我需要它保持私有)。这将把软件包数据和依赖项放在 %appdata%\npm\node_modules 中,但是您所说的地方没有 .cmd 文件。 - deed02392
2
什么是Mac的路径? - Luk Aron
我的路径变量中有输入gulp,但找不到bug gulp-sass。对我来说无法工作。 - theking2
有趣的是,变量被正确设置和添加,但仍然找不到。Noob先生的答案为我解决了这个问题(Windows 10)。 - Jürgen 'Kashban' Wahlmann

24

如果上述方法不起作用,则使用此命令显式设置路径

npm config set prefix c:/Users/<username>/AppData/Roaming/npm

这也适用于没有管理员权限的情况,这很好... - aturc

5
简短回答:将%APPDATA%\npm添加到PATH环境变量中。
长回答: npm会将.cmd文件保存在C:\Users\%username%\AppData\Roaming\npm目录下(%username%为当前用户的用户名),当你从npm包执行命令时,该文件被执行(如果一切正常)。 由于用户配置文件不一定在C:\Users中,因此最好使用类似%userprofile%这样的变量指向当前用户的用户配置文件或者%APPDATA%指向当前用户的用户配置文件中的AppData\Roaming文件夹。 通过将%APPDATA%\npm添加到PATH环境变量中,Windows会自动在该位置查找命名为输入命令名称的文件,如果当前目录中没有该文件。 对于每个命令,在npm文件夹中还有一个没有后缀的文件,它是一个bash脚本,在Windows上无法运行(除非你使用bash),但Windows会首先找到.cmd文件,因此你不需要担心这个问题。

5

只需运行此命令即可。

SET PATH=%AppData%\npm;%PATH%

1
或者如果你想将它添加到你的PowerShell配置文件中:$env:Path = "$env:appdata\npm;$env:Path" - General Grievance

2

将您的PATH环境变量设置为C:\Users\YOUR_USERNAME\AppData\Roaming\npm。这对我有用。


1

5
他要求的是“命令未找到”,而不是列出已安装的软件包。 - Mick

1

对于仍然遇到缺失命令问题的人。我已经处理了几周,几乎放弃在Windows上开发的希望。然后运行npm config list并找到了这个:

; userconfig C:\Users\deane\.npmrc
bin-links = false

需要将其更改为true。即使卸载并重新安装也无法帮助,因为它会保留您的.npmrc文件。

0
为了在Windows上使用npm install -g package-name,我们需要像上面提到的那样配置环境变量。但是,如果您不想配置环境变量,则可以使用yarn。如果您已经安装了yarn,则运行以下命令:

yarn global add package-name

如果您还没有安装yarn,则可以从这里安装: 通过MSI安装程序在Windows上安装Yarn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接