8

我正在进入 Gulp 的许多流中,并且遇到了一个令人困惑的主题。我想在所有任务实际完成时发布通知。我看到任务已执行,但默认情况下是异步运行的。

如果我想在每个步骤完成后显示一条通知......并且在所有步骤完成后显示通知怎么办?

在 gulp 中更好地控制任务时间的最佳方法是什么?

目前,我正在使用 gulp-notify 来显示通知。

更新 X 2

我真的没有任何错误,但想更好地了解这里的操作顺序以及如何触发我自己的所有任务何时完成的通知。这是示例。

var gulp = require('gulp'),
    gp_concat = require('gulp-concat'),
    gp_notify = require('gulp-notify');

gulp.task('task1', function() {
    return gulp.src(['file1.js','file2.js'])
        .pipe(gp_concat('file1_2.js')
        .pipe(gp_notify({ message: "file1_2 created." }
})

gulp.task('task2', function() {
    return gulp.src(['file3.js','file4.js'])
        .pipe(gp_concat('file3_4.js')
        .pipe(gp_notify({ message: "file3_4 created." }
})

gulp.task('mainTask', ['task1','task2'], function() {
    gulp.src('file*_*.js')
        .pipe(gp_notify({ message: "All tasks complete." }))
});

在控制台中,通知现在已正确计时,但是在执行结束时,就在 xx ms 后完成“mainTask”之前,最终的“所有任务完成”消息会触发 [n-1] 次,其中 n 是计数的子任务。

是什么导致这个最终通知被触发这么多次,如何抑制它?

4

2 回答 2

10

我猜您试图在每个任务结束时附加一个对 gulp-notify 的调用,并在依赖于先前任务的一般任务结束时附加一个调用。

所以问题可能与任务没有正确地将其“完成状态”传达给主要任务有关。对于这个主题,您可以查看系列中的运行任务,即任务依赖配方或总是方便的运行序列包。

更新

为了让一个任务知道它的子任务已经完成,就是让它们返回一个流,所以在示例代码中,子任务可以简单地返回gulp.src管道。

当使用字符串消息调用gulp-notify时,将为传递的流中存在的每个文件输出该消息,因此,在示例的最终任务中,它将被调用两次。对 gp_notify 的调用应更改为:gp_notify({ message: "All tasks complete." , onLast: true })。这样,消息只会被通知到最后一个文件。

于 2014-10-28T16:39:35.597 回答
9

By default, gulp-notify sends notifications for each file in the stream. If you only want one notification per-stream, add onLast: true to the options passed to notify(). e.g.

var gulp = require('gulp'),
    gp_concat = require('gulp-concat'),
    gp_notify = require('gulp-notify');

gulp.task('task1', function() {
    return gulp.src(['file1.js','file2.js'])
        .pipe(gp_concat('file1_2.js'))
        .pipe(gp_notify({ message: "file1_2 created.", onLast: true }));
});

gulp.task('task2', function() {
    return gulp.src(['file3.js','file4.js'])
        .pipe(gp_concat('file3_4.js'))
        .pipe(gp_notify({ message: "file3_4 created.", onLast: true }));
});

gulp.task('mainTask', ['task1','task2'], function() {
    gulp.src('file*_*.js')
        .pipe(gp_notify({ message: "All tasks complete.", onLast: true }));
});
于 2014-11-02T15:35:51.853 回答