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

关于吞咽的 2个手册说,我需要首先全球安装gulp(与-g旗子),然后在本地再一次。 为什么我需要这个?

在全局安装工具时,用户可以将其用作任何地方的命令行工具,包括节点项目以外的工具。 全局安装节点项目是不好的,因为它们使部署更加困难。

npm 5.2+

绑定npm 5.2npx工具解决了这个问题。 有了它,您可以调用本地安装的实用程序,如全局安装的实用程序(但您必须使用npx开始该命令)。 例如,如果你想调用本地安装的eslint ,你可以这样做:

 npx eslint . 

npm <5.2

当在package.json的script字段中使用时, npmsearchnode_modules以获取工具以及全局安装的模块,因此本地安装已足够。

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

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

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

由于不需要使用sudo这两种方法都可以帮助设置项目。 这也意味着当版本碰到package.json的时候gulp会被更新,所以当你的项目开发的时候,每个人都会使用相同版本的gulp。

附录:

在世界范围内使用,似乎有一些不寻常的行为。 当用作全局安装时,gulp会寻找一个本地安装的gulp来传递控制权。 因此,全球安装需要大量的本地安装工作。 上面的答案仍然存在。 本地安装总是优于全局安装。

TLDR; 原因如下:

这个工程的原因是因为gulpfile.js试图使用你的本地安装版本的gulpfile.js来运行你的gulpfile.js ,请看这里 。 因此,全球和本地安装吞噬的原因。

从本质上讲,当你在本地安装gulp ,脚本不在你的PATH ,所以你不能只inputgulp并期望shellfind这个命令。 通过全局安装它, gulp脚本进入你的PATH因为全局node/bin/目录很可能在你的path上。

为了尊重你的本地依赖, gulp将使用你自己的本地安装版本来运行gulpfile.js

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

 npm link gulp 

为什么我们需要在全球和本地安装饮用水 ”这个问题可以分解为以下两个问题:

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

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

其他几个人对这些问题单独提供了很好的答案,但是我认为将这些信息合并为一个统一的答案是有益的。

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

在当地安装饮用水的理由包括几个原因:

  1. 在本地包含项目的依赖关系可确保使用的gulp(或其他依赖项)版本是最初的预期版本。
  2. 当使用require()(你需要在你的脚本中包含gulp)时,Node默认不考虑全局模块。 最终,这是因为默认情况下,全局模块的path不会添加到NODE_PATH中。
  3. 根据Node开发团队,本地模块加载速度更快。 我不能说为什么会这样,但是这似乎与节点在生产中的使用(即运行时依赖性)相比,更多地与开发(即开发依赖性)相关。 我认为这是一个合理的原因,因为有些人可能会在意加载本地和全局模块的速度优势,但随时提出你的眉毛在这个原因。

如果我已经在本地安装了,为什么我需要全局安装gulp?

  1. 在全球范围内安装gulp的基本原理实际上只是在您的系统path中自动findgulp可执行文件的便利。

为避免本地安装,可以使用npm link [package] ,但是link命令和install --global命令似乎不支持--save-dev选项,这意味着看起来并不容易在全球安装gulp的方法,然后轻松地添加任何版本到您的本地package.json文件。

最后,我相信select使用全局模块来避免在所有项目中重复安装常用工具是非常有意义的,特别是在开发工具如grunt,gulp,jshint等的情况下。不幸的是,看起来你最终在与谷物相撞的时候就会对付这些工具。

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

另外,如果npm test引用gulp那么你可以inputnpm test ,它会运行本地吞咽。

我从来没有在全球范围内安装过,我认为这是糟糕的forms。

我不确定我们的问题是否与本地安装gulp直接相关。 但是我们必须自己安装一堆依赖项。 这导致了一个“巨大的”package.json,我们不确定在本地安装gulp是否是一个好主意。 我们必须这样做是因为我们的构build环境。 但是,如果不是绝对必要的,我不会推荐在全球范围内安装gulp。 我们遇到类似的问题,如下面的博客文章所述

我们的任何开发人员在本地机器上都没有出现这些问题,因为他们都在全球范围内安装了gulp。 在构build系统上,我们遇到了所描述的问题。 如果有人有兴趣,我可以深入探讨这个问题。 但是现在我只想提一下,在本地安装gulp并不是一个简单的方法。

你可以尝试黎明,这很简单

https://github.com/alibaba/dawn

例:

安装

 npm i dawn -g 

.dawn.yml文件添加到您的项目

 build: - name: webpack output: ./dist entry: ./src/*.js template: ./assets/*.html 

执行以下命令

 dn build 

您可以完成构build