使用 npm link 时如何修复 "Task is not in your gulpfile" 错误?

How to fix "Task is not in your gulpfile" error when using npm link?

我们有一堆共享通用 gulp 逻辑的应用程序,因此我们制作了一个包含大量自定义任务的 gulp 插件。

然而,我们希望避免为我们开发的每个应用程序安装 gulp+我们的插件(以及一半的互联网)。

理想情况下,我想这样做:

npm install -g gulp
npm install -g <our gulp plugin>

然后对于每个应用程序,我们只需要做:

npm link gulp
npm link <our gulp plugin>

虽然这可行,但问题是 gulp 不再识别我们的任何自定义 gulp 任务。任何 gulp 命令 I 运行 结果:

[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

'dev' 任务在我的 gulp 插件中,为什么找不到它?我的gulpfile.js只有这个:

var gulp = require('gulp');
var mygulpplugin = require('mygulpplugin');

当 gulp + 在本地安装插件时,完全相同的过程会起作用。有什么想法吗?

想通了。在我的模块底部添加了以下行:

module.exports = gulp;

每个模块中的 gulpfile 如下所示:

var gulp = require('gulp'); 
var mygulpplugin = require('mygulpplugin');
gulp.tasks = mygulpplugin.tasks;

除了已接受的答案,您还可以按照 grunt 时代流行的方式进行操作,将 gulp 注入插件:

在插件中: 将所有内容包装为:

module.exports = function(gulp) {
    gulp.task('foo', function () {
        ...
    })
    ...
}

并从插件文件中删除 require('gulp')

在依赖于插件的gulp文件中然后你做:

var gulp = require('gulp');
require('my-gulp-plugin')(gulp)

那样

  • 你可以在主 gulp 文件中有多个插件,因为你不会覆盖 gulp.tasks.
  • 插件不必在每个插件中声明 gulp package.json 依赖项(npm install 的工作更少)