关于gulp的2个手册说我需要先全局安装gulp(带-g标志),然后再在本地安装一次。我为什么需要这个?
当前回答
TLDR;原因如下:
这是因为gulp尝试使用本地安装的gulp版本运行gulpfile.js,见这里。因此需要在全局和本地安装gulp。
从本质上讲,当您在本地安装gulp时,脚本不在您的PATH中,因此您不能仅仅键入gulp并期望shell找到该命令。通过全局安装它,gulp脚本进入您的PATH,因为全局节点/bin/目录最有可能在您的路径上。
为了尊重本地依赖,gulp将使用本地安装的gulpfile.js来运行gulpfile.js。
其他回答
“为什么我们需要在全球和本地安装gulp ?”这个问题可以分为以下两个问题:
如果我已经在全局安装了gulp,为什么还需要在本地安装它? 如果我已经在本地安装了gulp,为什么还需要全局安装它?
其他几个人已经单独对这些问题提供了很好的答案,但我认为在一个统一的答案中巩固这些信息将是有益的。
如果我已经在全局安装了gulp,为什么还需要在本地安装它?
在本地安装gulp的基本原理包括以下几个原因:
Including the dependencies of your project locally ensures the version of gulp (or other dependencies) used is the originally intended version. Node doesn't consider global modules by default when using require() (which you need to include gulp within your script). Ultimately, this is because the path to the global modules isn't added to NODE_PATH by default. According to the Node development team, local modules load faster. I can't say why this is, but this would seem to be more relevant to node's use in production (i.e. run-time dependencies) than in development (i.e. dev dependencies). I suppose this is a legitimate reason as some may care about whatever minor speed advantage is gained loading local vs. global modules, but feel free to raise your eyebrow at this reason.
如果我已经在本地安装了gulp,为什么还需要全局安装它?
全局安装gulp的基本原理实际上只是为了方便在系统路径中自动找到gulp可执行文件。
为了避免在本地安装,你可以使用npm link [package],但是link命令以及install——global命令似乎不支持——save-dev选项,这意味着似乎没有一个简单的方法来全局安装gulp,然后轻松地将任何版本添加到你的本地包中。json文件。
最终,我相信使用全局模块的选项更有意义,以避免在所有项目中重复安装通用工具,特别是在诸如grunt、gulp、jshint等开发工具的情况下。不幸的是,当你违背常理时,似乎你最终会与工具作斗争。
从技术上讲,如果本地安装中的node_modules文件夹在PATH中,则不需要全局安装它。一般来说,这不是一个好主意。
或者,如果npm test引用了gulp,那么你只需要输入npm test,它就会运行本地的gulp。
我从未全局安装过gulp——我认为这是一种糟糕的形式。
TLDR;原因如下:
这是因为gulp尝试使用本地安装的gulp版本运行gulpfile.js,见这里。因此需要在全局和本地安装gulp。
从本质上讲,当您在本地安装gulp时,脚本不在您的PATH中,因此您不能仅仅键入gulp并期望shell找到该命令。通过全局安装它,gulp脚本进入您的PATH,因为全局节点/bin/目录最有可能在您的路径上。
为了尊重本地依赖,gulp将使用本地安装的gulpfile.js来运行gulpfile.js。
我不确定我们的问题是否与只在本地安装gulp直接相关。但是我们必须自己安装一堆依赖。这导致了一个“巨大”的包裹。我们不确定只在本地安装gulp是否真的是个好主意。我们必须这样做是因为我们的构建环境。但如果不是绝对必要的话,我不建议非全局安装gulp。我们也遇到了类似的问题,如下文所述
我们的任何开发人员在他们的本地机器上都不会遇到这些问题,因为他们都在全局安装了gulp。在构建系统上,我们遇到了所描述的问题。如果有人感兴趣,我可以深入研究这个问题。但是现在我只想说,只在本地安装gulp并不容易。
只是因为我在这里没有看到它,如果你是在MacOS或Linux上,我建议你把它添加到你的PATH(在你的bashrc等):
node_modules/.bin
使用这个相对路径条目,如果你位于任何节点项目的根文件夹中,你可以运行任何命令行工具(eslint、gulp等),而不用担心“全局安装”或npm run等。
一旦我这样做了,我就从来没有全局安装过一个模块。
推荐文章
- 如何使用Jest测试对象键和值是否相等?
- 将长模板文字行换行为多行,而无需在字符串中创建新行
- 如何在JavaScript中映射/减少/过滤一个集?
- Bower: ENOGIT Git未安装或不在PATH中
- 添加javascript选项选择
- 在Node.js中克隆对象
- 为什么在JavaScript的Date构造函数中month参数的范围从0到11 ?
- 使用JavaScript更改URL参数并指定默认值
- 在window.setTimeout()发生之前取消/终止
- 如何删除未定义和空值从一个对象使用lodash?
- 检测当用户滚动到底部的div与jQuery
- 在JavaScript中检查字符串包含另一个子字符串的最快方法?
- 检测视口方向,如果方向是纵向显示警告消息通知用户的指示
- ASP。NET MVC 3 Razor:在head标签中包含JavaScript文件
- 禁用从HTML页面中拖动图像