关于gulp的 2本手册说,我需要先在全局(带有-g标志)中安装gulp,然后再在本地安装一次。我为什么需要这个?
关于gulp的 2本手册说,我需要先在全局(带有-g标志)中安装gulp,然后再在本地安装一次。我为什么需要这个?
Answers:
全局安装工具时,用户可以在任何地方(包括节点项目外部)将其用作命令行实用工具。节点项目的全局安装不好,因为它们使部署更加困难。
与该npx
实用程序捆绑在一起的软件可以npm
5.2
解决此问题。使用它,您可以调用本地安装的实用程序,例如全局安装的实用程序(但必须以开头的命令npx
)。例如,如果要调用本地安装的eslint
,可以执行以下操作:
npx eslint .
在script
package.json 的字段中使用时,npm
搜索node_modules
该工具以及全局安装的模块,因此本地安装就足够了。
因此,如果您对此感到满意(在package.json中):
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
等,npm run test
然后再运行,则完全不需要全局安装。
由于sudo
不需要,这两种方法都可以帮助人们设置您的项目。这也意味着gulp
当package.json中的版本被修改时它将进行更新,因此在开发项目时每个人都将使用相同版本的gulp。
似乎在全球范围内使用时,gulp会有一些异常行为。用作全局安装时,gulp将查找本地安装的gulp,以将控制权传递给该本地。因此,gulp全局安装需要gulp本地安装才能工作。上面的答案仍然存在。本地安装总是比全局安装更好。
./node_modules/.bin/gulp
。
gulp
,coffee
因此这些命令从我的节点项目根目录开始工作(例如alias gulp="node_modules/.bin/gulp"
)。这样,如果需要,这些命令易于使用,并且不会发生全局/本地版本冲突。
gulp
,它会显示以下错误消息Local gulp not found in ...
。据我了解,它应该首先查看本地的node_modules,如果找不到,则应该查看全局安装的模块,不是吗?谢谢!
TLDR;这里的原因:
之所以起作用,是因为
gulp
尝试gulpfile.js
使用本地安装的版本运行您的产品gulp
,请参见此处。因此,在全球和本地安装gulp的原因。
本质上,当您gulp
在本地安装脚本时,该脚本不在您的脚本中PATH
,因此您不能仅仅键入gulp
并期望外壳程序找到该命令。通过全局安装gulp
脚本,脚本会进入您PATH
的node/bin/
目录,因为全局目录很可能位于您的路径上。
不过,要尊重您的本地依赖关系,请gulp
使用自己本地安装的版本来运行gulpfile.js
。
gulp
,放置node_modules/.bin/gulp
路径需要您全局安装的软件包。存储很便宜,但是扔掉用于模拟符号链接的MB是IMO的纯洁性。
您可以将全局安装的gulp
本地链接与
npm link gulp
npm link
。
问题“ 我们为什么需要在全球和本地安装gulp? ”可以分为以下两个问题:
如果已经在全球范围内安装了gulp,为什么还要在本地安装gulp?
如果已经在本地安装了gulp,为什么需要在全局安装gulp?
其他几个人孤立地为这些问题提供了出色的答案,但我认为将信息整合为一个统一的答案将是有益的。
如果已经在全球范围内安装了gulp,为什么还要在本地安装gulp?
在本地安装gulp的基本原理包括以下几个原因:
如果已经在本地安装了gulp,为什么需要在全局安装gulp?
为了避免在本地安装,可以使用npm link [package]
,但是link命令以及该install --global
命令似乎都不支持该--save-dev
选项,这意味着似乎没有一种简便的方法可以在全球范围内安装gulp,然后轻松地添加任何版本您的本地package.json文件。
最终,我相信可以选择使用全局模块来避免必须在所有项目中重复安装通用工具,尤其是在开发工具(例如grunt,gulp,jshint等)的情况下。看来,当您违反常规时,您最终会与工具争斗。
我不确定我们的问题是否与仅在本地安装gulp直接相关。但是我们必须自己安装一堆依赖项。这导致一个“巨大的” package.json,我们不确定仅在本地安装gulp是否真的是一个好主意。由于我们的构建环境,我们不得不这样做。但是,如果不是绝对必要的话,我不建议您不要在全球范围内安装gulp。我们遇到了以下博客文章中所述的类似问题
这些问题对于我们本地计算机上的任何开发人员都不会出现,因为他们都在全球范围内安装了gulp。在构建系统上,我们遇到了描述的问题。如果有人感兴趣,我可以更深入地探讨这个问题。但是现在我只想提一提,仅在本地安装gulp并非一条容易的途径。
只是因为我在这里没有看到它,所以如果您使用的是MacOS或Linux,建议您将其添加到PATH(在bashrc等文件中):
node_modules/.bin
使用此相对路径条目,如果您坐在任何节点项目的根文件夹中,则可以运行任何命令行工具(eslint,gulp等),而不必担心“全局安装” npm run
等问题。
一旦完成此操作,就永远不会在全球范围内安装模块。