【问题标题】:Locally installed versus globally installed NPM modules本地安装与全局安装的 NPM 模块
【发布时间】:2015-02-07 23:54:35
【问题描述】:

在我的 package.json 文件中,我将 bower 列为依赖项。在我运行npm install 之后,bower 会在本地安装。当我在本地安装后尝试运行 bower 时出现错误

“bower”未被识别为内部或外部命令

似乎解决此问题的唯一方法是全局安装 bower。为什么我必须这样做?如果我的项目包含 bower 的本地副本,为什么节点不使用它?

【问题讨论】:

    标签: node.js npm windows-7 bower


    【解决方案1】:

    本地安装使 bower 可用于当前项目(它将所有节点模块存储在 node_modules 中)。这通常只适用于使用像 var module = require('module'); 这样的模块它不会作为 command 可用,直到您全局安装它才能解析 shell npm install -g module 其中 npm 将它安装在一个地方您的路径变量将在哪里解析此命令

    编辑: This documentation 解释得很透彻。

    【讨论】:

    • 在本地使用 bower 有什么意义,例如 var bower = require('bower'); ?
    • 好吧,bower 是一个不好的例子,因为我认为他们不会通过 javascript 公开 api,但 express 是我在具有命令行界面的项目中使用的东西作为您在 js 文件中本地使用的库。 (有关有用的文档,请参阅我的编辑)
    • 它也很有用,因为package.json 中的scripts 块中的命令会自动解析本地命令。这意味着您可以拥有一个依赖于 bower 的脚本,而没有对 bower 的无证依赖。
    【解决方案2】:

    您可以通过在 cmd 中键入以下行来执行本地实例:

    node_modules/bower/bin/bower <bower args>
    

    【讨论】:

    • 或更短:node_modules/.bin/bower
    【解决方案3】:

    我们同时使用 PHP 和 JavaScript,所以我们有 composer 和 npm。

    我们从事的每个项目都有不同的包,用于包的运行时以及构建/开发工具。

    由于每个项目都有版本限制,全局安装包的版本 x(将从命令行运行)会给我们带来问题,我们在每个包中安装所有工具。在相应的 composer.json / package.json 文件中定义要容易得多。

    但是,如果您必须不断地向命令添加额外的路径,那么运行 CLI 工具会很痛苦。

    为此,我们向团队建议将以下路径添加到您的 $PATH 中相应的 .bashrc(或等效文件)中:

    ./vendor/bin:./node_modules/.bin

    (编辑:对于 Windows,路径为 .\vendor\bin;.\node_modules\.bin;

    因此,在项目 X 中,我们可以访问该项目的 CLI 工具。切换到项目 Y,我们得到了项目工具。

    当然,你会得到重复,但每个项目都由不同的团队维护(有些人在多个团队中),所以同样,在全局设置中拥有 1 个版本是一个问题。

    【讨论】:

      【解决方案4】:

      如果您希望 NPM 模块包含在从命令行运行的路径中,通常您会全局安装它们。由于它是在本地安装的,因此您必须从 node_modules 文件夹运行它。

      【讨论】:

      • 正如在接受的答案中链接的那样,它不像全局安装所有东西那么简单,而不是推荐的方式。
      猜你喜欢
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2013-09-26
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多