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

Javascript 为什么我们需要在全球和本地安装gulp?,javascript,gulp,Javascript,Gulp,关于的2本手册说,我需要首先在全局范围内安装gulp(带-g标志),然后在本地再安装一次。为什么我需要它?在全局安装工具时,用户可以在任何地方(包括节点项目之外)将其用作命令行实用程序。节点项目的全局安装不好,因为它们使部署更加困难 npm 5.2+ 与npm5.2捆绑的实用程序解决了这个问题。使用它,您可以调用本地安装的实用程序,如全局安装的实用程序(但必须以npx开头)。例如,如果要调用本地安装的eslint,可以执行以下操作: npx eslint . 净现值

关于的2本手册说,我需要首先在全局范围内安装gulp(带-g标志),然后在本地再安装一次。为什么我需要它?

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

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

npx eslint .
净现值<5.2 当在package.json的
script
字段中使用时,
npm
搜索
node\u模块以及全局安装的模块,因此本地安装就足够了

因此,如果您满意(在您的package.json中):

等等,然后运行
npm运行测试
,那么您根本不需要全局安装

这两种方法都有助于让人们了解您的项目,因为不需要
sudo
。这还意味着,当package.json中的版本发生碰撞时,
gulp
将被更新,因此每个人在开发项目时都将使用相同版本的gulp

增编:
在全球使用时,gulp似乎有一些不寻常的行为。当用作全局安装时,gulp会查找本地安装的gulp以将控制权传递给它。因此,gulp全局安装需要gulp本地安装才能工作。不过,上面的答案仍然有效。本地安装总是比全局安装更可取。

从技术上讲,如果本地安装中的
node\u modules
文件夹位于
路径中,则不需要全局安装。一般来说,这不是一个好主意

或者,如果
npm测试
引用了
gulp
,那么您可以只键入
npm测试
,它将运行本地gulp

我从未在全球范围内安装过gulp——我认为这是一种糟糕的形式;这是:

之所以这样做,是因为
gulp
尝试使用本地安装的
gulp
版本运行
gulpfile.js
,请参阅。因此,需要在全球和本地安装gulp

基本上,当您在本地安装
gulp
时,脚本不在
路径中,因此您不能仅键入
gulp
并期望shell找到该命令。通过全局安装它,
gulp
脚本进入您的
路径
,因为全局
节点/bin/
目录很可能位于您的路径上


但是为了尊重您的本地依赖性,
gulp
将使用您本地安装的版本来运行
gulpfile.js

我不确定我们的问题是否与仅在本地安装gulp直接相关。但是我们必须自己安装一堆依赖项。这导致了一个“巨大的”package.json,我们不确定只在本地安装gulp是否真的是一个好主意。我们必须这样做是因为我们的构建环境。但如果不是绝对必要的话,我不建议在全球范围内安装gulp。我们面临着如下所述的类似问题


所有这些问题都不会出现在本地机器上的任何开发人员身上,因为他们都在全球范围内安装了gulp。在构建系统上,我们有描述的问题。如果有人感兴趣,我可以深入探讨这个问题。但现在我只想指出,仅在本地安装gulp并非易事

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

npm link gulp
“为什么我们需要在全球和本地安装gulp?”这个问题可以分为以下两个问题:

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

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

  • 其他几个人单独提供了这些问题的优秀答案,但我认为将这些信息整合到一个统一的答案中是有益的

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

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

  • 在本地包含项目的依赖项可确保使用的gulp版本(或其他依赖项)是最初预期的版本
  • Node在使用Read()时不考虑全局模块(您需要在脚本中包含GURP)。最终,这是因为默认情况下,全局模块的路径不会添加到节点路径中
  • 根据节点开发团队的说法,本地模块的加载速度更快。我不能说这是为什么,但这似乎与节点在生产中的使用(即运行时依赖关系)比在开发中的使用(即开发依赖关系)更相关。我想这是一个合理的理由,因为有些人可能会关心加载本地模块和全局模块所获得的速度优势,但出于这个原因,请随意提出质疑
  • 如果我已经在本地安装了gulp,为什么我需要在全球范围内安装它?

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

    最终,我认为使用全局模块的选项更有意义
    npm link gulp
    
    node_modules/.bin