Ste*_*rov 287 javascript gulp
2关于gulp的手册说我需要首先全局安装gulp(使用-g标志)然后再在本地安装一次.我为什么需要这个?
qub*_*yte 233
在全局安装工具时,用户可以将其用作任何位置的命令行实用程序,包括节点项目外部.节点项目的全局安装很糟糕,因为它们使部署更加困难.
npx捆绑的实用程序npm 5.2解决了这个问题.有了它,您可以调用本地安装的实用程序,如全局安装的实用程序(但您必须使用此命令开始npx).例如,如果要调用本地安装eslint,则可以执行以下操作:
npx eslint .
Run Code Online (Sandbox Code Playgroud)
在scriptpackage.json 的字段中使用时,npm搜索node_modules工具以及全局安装的模块,因此本地安装就足够了.
所以,如果你满意(在你的package.json中):
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
Run Code Online (Sandbox Code Playgroud)
然后运行,npm run test你根本不需要全局安装.
由于sudo不需要这两种方法对于让人们设置项目非常有用.这也意味着gulp将在package.json中出现版本时更新,因此在使用您的项目进行开发时,每个人都将使用相同版本的gulp.
看来gulp在全球使用时有一些不寻常的行为.当用作全局安装时,gulp会查找本地安装的gulp以将控制权传递给.因此,gulp全局安装需要gulp本地安装才能工作.上面的答案仍然有效.本地安装始终优于全局安装.
Dwa*_*oks 80
TLDR; 这里的原因:
这样做的原因是因为
gulp尝试gulpfile.js使用本地安装的版本运行gulp,请参阅此处.因此全球和本地安装gulp的原因.
本质上,当您gulp在本地安装时,脚本不在您的脚本中PATH,因此您不能只键入gulp并期望shell找到该命令.通过全局安装gulp脚本进入您的脚本,PATH因为全局node/bin/目录很可能在您的路径上.
但是,为了尊重您的本地依赖关系,gulp将使用您自己的本地安装版本来运行gulpfile.js.
Der*_*eer 66
问题" 为什么我们需要在全球和本地安装gulp? "这个问题可以分解为以下两个问题:
如果我已经在全局安装gulp,为什么还需要在本地安装gulp?
如果我已在本地安装了gulp,为什么还需要全局安装gulp?
其他几个人孤立地为这些问题提供了很好的答案,但我认为在统一答案中整合信息是有益的.
如果我已经在全局安装gulp,为什么还需要在本地安装gulp?
在本地安装gulp的基本原理包括以下几个原因:
如果我已在本地安装了gulp,为什么还需要全局安装gulp?
为了避免在本地安装,你可以使用npm link [package],但是链接命令以及install --global命令似乎不支持该--save-dev选项,这意味着似乎没有一种简单的方法来全局安装gulp然后轻松添加任何版本的你的本地package.json文件.
最后,我认为选择使用全局模块以避免在所有项目中复制常用工具的安装更有意义,尤其是在开发工具(如grunt,gulp,jshint等)的情况下.不幸的是当你反对谷物时,似乎你最终会对抗这些工具.
从技术上讲,如果node_modules本地安装中的文件夹位于您的文件夹中,则无需全局安装PATH.一般来说,这不是一个好主意.
或者,如果npm test引用,gulp那么您只需键入npm test它,它将运行本地gulp.
我从来没有在全球范围内安装gulp - 我认为这是糟糕的形式.