Gulp任务不会运行 - 而是成为其他任务的回调

时间:2015-06-03 13:07:08

标签: gulp

我的任务是这样的:

var gulp = require('gulp');
gulp.task('doStuff', ['a', 'b', 'c'], function () {
    console.log("success");
});

我已阅读docs,根据我的理解,这是应该发生的事情:

  • gulp创建一个名为 doStuff ;
  • 的任务
  • gulp异步运行任务 a b c ;
  • 完成上述三项任务后,gulp运行我为 doStuff 定义的功能。

这是实际发生的事情:

  • gulp创建一个名为 doStuff ;
  • 的任务
  • gulp异步运行任务 a b c ;
  • gulp表示已成功运行 doStuff 任务,但未运行我作为 gulp.task 方法的第三个参数传递的函数。

我很惊讶地发现,如果我接受其他函数中的回调,那回调就是我的函数。即如果我这样做:

var gulp = require('gulp');
gulp.task('a', function (callback) {
    callback();
});

这将运行我的代码。

我希望我的函数只执行一次,并且只有在所有其他任务都运行之后才能执行。我错过了什么,或者误解了什么?我该怎么办?

顺便说一下,这可能是相关的:我的大多数其他任务都会执行生成文件等操作,并返回此类文件。像:

var gulp = require('gulp');
var rename = require('gulp-rename');
var someLogic = require('someLogicIImplementedSomewhereElse');
var path = "../../somepath";

gulp.task('foo', function() {
    return gulp.src(path)
        .pipe(someLogic())
        .pipe(rename("renamed.js"))
        .pipe(gulp.dest(path));
});

1 个答案:

答案 0 :(得分:3)

确保a,b和c返回某些内容或执行回调。

尝试以下示例:

gulp.task('a', function (done) {
    done();
});

gulp.task('b', function (done) {
    return gulp.src('.');
});

gulp.task('c', function (done) {
    done();
});

gulp.task('stuff', ['a', 'b', 'c'], function () {
    console.log("success");
});

以下是gulp stuff

的输出
- Starting 'a'...
- Finished 'a' after 48 μs
- Starting 'b'...
- Starting 'c'...
- Finished 'c' after 6.03 μs
- Finished 'b' after 9.14 ms
- Starting 'stuff'...
- success
- Finished 'stuff' after 38 μs