为什么我们需要在全球和本地安装gulp?

时间:2014-03-01 14:09:01

标签: javascript gulp

关于gulp的2本手册说我需要首先全局安装gulp(使用-g标志)然后再在本地安装一次gulp。我为什么需要这个?

7 个答案:

答案 0 :(得分:231)

在全局安装工具时,用户可以将其用作任何位置的命令行实用程序,包括节点项目外部。节点项目的全局安装错误,因为它们使部署更加困难。

npm 5.2 +

npm 5.2捆绑在一起的npx实用程序解决了这个问题。有了它,您可以调用本地安装的实用程序,如全局安装的实用程序(但您必须使用npx开始命令)。例如,如果要调用本地安装的eslint,则可以执行以下操作:

npx eslint .

npm< 5.2

在package.json的script字段中使用时,npm会在node_modules中搜索该工具以及全局安装的模块,因此本地安装就足够了。

所以,如果你对(在你的package.json中)感到满意:

"devDependencies": {
    "gulp": "3.5.2"
}
"scripts": {
    "test": "gulp test"
}

等。并且使用npm run test运行,那么您根本不需要全局安装。

这两种方法对于让人们设置项目非常有用,因为不需要sudo。这也意味着当版本在package.json中出现时,gulp将会更新,因此在使用您的项目进行开发时,每个人都将使用相同版本的gulp。

附录:

看来gulp在全球使用时有一些不寻常的行为。当用作全局安装时,gulp会查找本地安装的gulp以将控制权传递给。因此,gulp全局安装需要gulp本地安装才能工作。上面的答案仍然有效。本地安装始终优于全局安装。

答案 1 :(得分:80)

TLDR;这是why

  

这可行的原因是gulp尝试使用您当地安装的gulpfile.js版本运行gulp,请参阅here。因此,全球和本地安装gulp的原因。

基本上,当您在本地安装gulp时,脚本不在您的PATH中,因此您无法输入gulp并期望shell找到命令。通过全局安装,gulp脚本会进入您的PATH,因为全局node/bin/目录很可能位于您的路径上。

要尊重您的本地依赖关系,gulp将使用您自己的本地安装版本来运行gulpfile.js

答案 2 :(得分:78)

您可以将全局安装的gulp本地链接到

npm link gulp

答案 3 :(得分:63)

问题" 为什么我们需要在全球和本地安装gulp?"可以分解为以下两个问题:

  1. 如果我已经在全球范围内安装gulp,为什么还需要在本地安装gulp?

  2. 如果我已在本地安装gulp,为什么还要全局安装gulp?

  3. 其他几个人已经孤立地为这些问题提供了出色的答案,但我认为在统一答案中整合信息是有益的。

    如果我已经在全球范围内安装gulp,为什么还需要在本地安装gulp?

    本地安装gulp的基本原理包括以下几个原因:

    1. 在本地包含项目的依赖项可确保使用的gulp(或其他依赖项)版本是最初预期的版本。
    2. 使用require()时,Node默认不考虑全局模块(您需要在脚本中包含gulp)。最终,这是因为默认情况下,全局模块的路径不会添加到NODE_PATH。
    3. 根据Node开发团队的说法,本地模块的加载速度更快。我不能说这是为什么,但这似乎与节点在生产中的使用(即运行时依赖性)比在开发中(即开发依赖性)更相关。我认为这是一个合理的理由,因为有些人可能会关心加载本地模块和全局模块所获得的任何微小的速度优势,但是可以随意引起你的注意。
    4. 如果我已在本地安装gulp,为什么需要全局安装gulp?

      1. 全局安装gulp的基本原理实际上就是在系统路径中自动找到gulp可执行文件的便利性。
      2. 为了避免在本地安装,您可以使用npm link [package],但是链接命令以及install --global命令似乎不支持--save-dev选项,这意味着没有#&# 39;似乎是一种简单的方法来全局安装gulp,然后轻松添加任何版本的本地package.json文件。

        最终,我认为选择使用全局模块以避免必须在所有项目中复制常用工具的安装更有意义,尤其是在开发工具(如grunt,gulp,jshint等)的情况下不幸的是,当你反对谷物时,你似乎最终会对抗这些工具。

答案 4 :(得分:8)

从技术上讲,如果本地安装中的node_modules文件夹位于PATH,则无需全局安装。一般来说,这不是一个好主意。

或者,如果npm test引用gulp,那么您只需输入npm test即可运行本地gulp。

我从未在全球范围内安装gulp - 我认为这是糟糕的形式。

答案 5 :(得分:2)

我不确定我们的问题是否与本地安装gulp直接相关。但我们必须自己安装一堆依赖项。这导致了一个巨大的" package.json我们不确定在本地安装gulp是否真的是一个好主意。由于我们的构建环境,我们必须这样做。但是如果不是绝对必要的话,我不建议不要全局安装gulp。我们遇到了以下blog-post

中描述的类似问题

我们的本地计算机上的任何开发人员都不会出现这些问题,因为他们都在全局安装了gulp。在构建系统上,我们遇到了所描述的问题。如果有人有兴趣,我可以深入研究这个问题。但是现在我只想提一下,在本地安装gulp并不是一条简单的途径。

答案 6 :(得分:0)

只是因为我在这里没有看到它,所以如果您使用的是MacOS或Linux,建议您将其添加到PATH(在bashrc等文件中):

node_modules/.bin

使用此相对路径条目,如果您坐在任何节点项目的根文件夹中,则可以运行任何命令行工具(eslint,gulp等),而不必担心“全局安装”或{{1 }}等

一旦这样做,我就永远不会在全球范围内安装模块。