【问题标题】:Global NPM package installed but command not found已安装全局 NPM 包但未找到命令
【发布时间】:2015-07-09 10:00:15
【问题描述】:

我已经通过命令行全局安装了两个npm包"download""enigmavirtualbox"

npm install -g downloadnpm install -g engimavirtualbox

我正在尝试在批处理文件中使用它们来捆绑我的节点项目中的单个 .exe 文件。对于这两种情况,npm list -g <packagename> 命令会产生各自的版本输出,与当前工作目录无关。

但是,在我的批处理脚本中找不到“下载”和“enigmavirtualbox”命令。

运行npm root -g 产生C:\Users\<username>\AppData\Roaming\npm\node_modules 并查看该文件夹,我可以看到两个包的文件夹都存在。

我尝试过的:

  • here 所述更改npm root
  • 卸载并重新安装软件包
  • 添加环境。变量 NODE_PATH 指向C:\Users\<username>\AppData\Roaming\npm\node_modules
  • C:\Users\<username>\AppData\Roaming\npm\node_modules 添加到 PATH 环境中。变量

同样的设置在我的第二台计算机上运行(都运行 Win7 64 位)。我的节点安装有问题,还是我做错了什么?

【问题讨论】:

标签: windows node.js batch-file npm package


【解决方案1】:

可执行二进制文件和 .cmd 文件以 C:\Users\<username>\AppData\Roaming\npm 结尾(减去末尾的 node_modules),因此将该路径添加到 PATH 环境中。变量解决了这个问题。

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

【讨论】:

  • 这行得通,尽管使用通配符可能会更好:%USERPROFILE%\AppData\Roaming\npm。该行必须放在 PATH 环境变量中的任何 npm、node 或 nodejs 路径之前,以便 npm 可以适当地找到您的全局包。
  • 我创建了自己的节点 package.json 并从那里运行 npm install -g(我没有发布它,因为我需要它保持私密)。这会将包数据和依赖项放在%appdata%\npm\node_modules 中,但您所说的没有.cmd 文件。
  • mac的路径是什么?
  • 该条目在我的路径变量 gulp 中可以找到 bug gulp-sass not。不适合我。
  • 有趣的是,变量设置和添加正确,仍然没有找到。 Mr.Noob 的答案为我做了(Windows 10)。
【解决方案2】:

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

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

【讨论】:

  • 如果您没有管理员权限,这也适用,这很好......
【解决方案3】:

这里有更多关于这个主题的信息:https://medium.com/@alberto.schiabel/npm-tricks-part-1-get-list-of-globally-installed-packages-39a240347ef0

已全局安装的软件包列表

npm list -g --depth 0

【讨论】:

  • 他要求“找不到命令”而不是列出已安装的软件包
【解决方案4】:

将您的PATH 环境变量设置为C:\Users\YOUR_USERNAME\AppData\Roaming\npm。这为我解决了问题。

【讨论】:

    【解决方案5】:

    适用于仍然因缺少命令而遇到问题的任何人。我已经处理了几个星期,几乎放弃了在 Windows 上开发的希望。然后跑npm config list 发现了这个:

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

    需要将其更改为 true。即使卸载和重新安装也无济于事,因为它会保留您的 .npmrc 文件。

    【讨论】:

      【解决方案6】:

      只需运行此命令

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

      【讨论】:

      • 或者如果你想将它添加到你的 PowerShell 配置文件中:$env:Path = "$env:appdata\npm;$env:Path"
      【解决方案7】:

      简答:将%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 文件,所以你不必担心这个。

      【讨论】:

        猜你喜欢
        • 2023-04-03
        • 2017-06-17
        • 1970-01-01
        • 2016-11-23
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        • 2019-03-03
        • 1970-01-01
        相关资源
        最近更新 更多