2 份关于gulp 的手册说我需要先全局安装 gulp(使用 -g 标志),然后再在本地安装一次。为什么我需要这个?
为什么我们需要在全局和本地安装 gulp?
在全局安装工具时,用户可以将其用作任何地方的命令行实用程序,包括节点项目之外。节点项目的全局安装很糟糕,因为它们使部署更加困难。
npm 5.2+
npx
捆绑的实用程序npm
5.2
解决了这个问题。使用它,您可以调用本地安装的实用程序,如全局安装的实用程序(但您必须以 开头命令npx
)。例如,如果要调用本地安装的eslint
,可以执行以下操作:
npx eslint .
npm < 5.2
在script
package.json 的某个字段中使用时,npm
搜索node_modules
工具以及全局安装的module,因此本地安装就足够了。
因此,如果您对(在您的 package.json 中)感到满意:
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
等等,npm run test
然后运行,你根本不需要全局安装。
这两种方法对于让人们设置您的项目很有用,因为sudo
不需要。这也意味着gulp
当 package.json 中的版本被碰撞时会更新,所以每个人在开发你的项目时都会使用相同版本的 gulp。
附录:
似乎 gulp 在全局使用时有一些不寻常的行为。当用作全局安装时,gulp 会查找本地安装的 gulp 以将控制权传递给。因此 gulp 全局安装需要 gulp 本地安装才能工作。上面的答案仍然成立。本地安装总是优于全局安装。
您可以将gulp
本地安装的全局链接与
npm link gulp
问题“为什么我们需要全局和本地安装gulp? ”可以分解为以下两个问题:
如果我已经在全球范围内安装了 gulp,为什么还需要在本地安装它?
如果我已经在本地安装了 gulp,为什么还需要全局安装 gulp?
其他几个单独地对这些问题提供了很好的答案,但我认为将这些信息整合到一个统一的答案中是有益的。
如果我已经在全球范围内安装了 gulp,为什么还需要在本地安装它?
在本地安装 gulp 的基本原理包括以下几个原因:
- 在本地包含项目的依赖项可确保所使用的 gulp(或其他依赖项)版本是最初预期的版本。
- 默认情况下,Node 在使用 require() 时不考虑全局module(您需要在脚本中包含 gulp)。最终,这是因为全局module的路径默认没有添加到 NODE_PATH 中。
- 根据 Node 开发团队的说法,本地module加载速度更快。我不能说这是为什么,但这似乎与节点在生产中的使用(即运行时依赖项)比在开发中(即开发依赖项)更相关。我想这是一个合理的原因,因为有些人可能会关心加载本地module与全局module所获得的任何微小的速度优势,但请随时提出您的意见。
如果我已经在本地安装了 gulp,为什么还需要全局安装 gulp?
- 全局安装 gulp 的基本原理实际上只是在系统路径中自动找到 gulp 可执行文件的便利。
为了避免在本地安装,您可以使用npm link [package]
,但链接命令和install --global
命令似乎不支持该--save-dev
选项,这意味着似乎没有一种简单的方法可以全局安装 gulp,然后轻松添加任何版本您的本地 package.json 文件。
最终,我认为选择使用全局module以避免在所有项目中重复安装通用工具更有意义,尤其是在开发工具如 grunt、gulp、jshint 等的情况下。不幸的是当您违背常规时,似乎您最终会与工具作斗争。
从技术上讲,如果node_modules
本地安装中的文件夹位于PATH
. 通常这不是一个好主意。
或者,如果npm test
引用,gulp
则您只需键入npm test
即可运行本地吞咽。
我从来没有在全球范围内安装过 gulp——我认为它的形式很糟糕。