使用 npm 链接时如何修复“任务不在您的 gulpfile 中”错误?
Posted
技术标签:
【中文标题】使用 npm 链接时如何修复“任务不在您的 gulpfile 中”错误?【英文标题】:How to fix "Task is not in your gulpfile" error when using npm link? 【发布时间】:2015-05-12 09:34:51 【问题描述】:我们有一堆共享通用 gulp 逻辑的应用程序,所以我们制作了一个 gulp 插件,其中包含一堆自定义任务。
但是,我们希望避免为我们开发的每个应用程序安装 gulp+我们的插件(以及一半的互联网)。
理想情况下,我想这样做:
npm install -g gulp
npm install -g <our gulp plugin>
那么对于每个应用,我们只需要做:
npm link gulp
npm link <our gulp plugin>
虽然这可行,但问题是 gulp 不再识别我们的任何自定义 gulp 任务。我运行的任何 gulp 命令都会导致:
[15:16:51] Using gulpfile /workspace/my-app/gulpfile.js
[15:16:51] Task 'dev' is not in your gulpfile
[15:16:51] Please check the documentation for proper gulpfile formatting
“开发”任务在我的 gulp 插件中,为什么找不到?我的 gulpfile.js 只有这个:
var gulp = require('gulp');
var mygulpplugin = require('mygulpplugin');
当 gulp + 插件在本地安装时,完全相同的过程会起作用。任何想法为什么?
【问题讨论】:
您能说明dev
任务是如何定义的吗?
像这样:gulp.task('dev', ['clean'], function() runSequence('bower', 'jsBuildDev', 'buildCSS', 'indexBuildDev'); ) ;
【参考方案1】:
想通了。在我的模块底部添加了以下行:
module.exports = gulp;
我在每个模块中的 gulpfile 如下所示:
var gulp = require('gulp');
var mygulpplugin = require('mygulpplugin');
gulp.tasks = mygulpplugin.tasks;
【讨论】:
不,这不是错字。 我认为@WilliamLepinski 的意思是您应该将.
更正为;
。
如果你选择只公开任务,你也可以只做module.exports = gulp.tasks
然后在每个模块gulp.tasks = require('mygulpplugin')
奇怪的是我们必须这样做。我想知道,如果没有这样的问题,require-dir 方法是如何工作的? ***.com/questions/25518870/… 这种方法也包括其他文件的 gulp 任务,所以它应该会遇到同样的问题。
2 年后,这仍然是最简单的解决方案(至少对于我的用例而言)。我没有制作任何模块,只是尝试在多个文件夹之间共享 gulp 任务,这正是我想要的。【参考方案2】:
除了接受的答案之外,您还可以按照在 grunt 时代流行的方式进行操作,将 gulp 注入插件:
在插件中: 用以下方式包装所有内容:
module.exports = function(gulp)
gulp.task('foo', function ()
...
)
...
并从插件文件中删除require('gulp')
。
在依赖于插件的 gulpfile 中,然后执行:
var gulp = require('gulp');
require('my-gulp-plugin')(gulp)
这样
您可以在主 gulpfile 中拥有多个插件,因为您不会覆盖gulp.tasks
。
插件不必在每个插件中声明gulp
package.json
依赖项(npm install
的工作量更少)
【讨论】:
以上是关于使用 npm 链接时如何修复“任务不在您的 gulpfile 中”错误?的主要内容,如果未能解决你的问题,请参考以下文章
npm 审计修复后如何解决原型污染 lodash 需要人工审核