观看的任务完成后,我可以通知吗?

时间:2017-05-12 14:35:58

标签: javascript gulp gulp-notify

我们有一个包含约12个任务的gulpfile,其中4个由gulp.watch激活。当gulp-notify启动的任务完成时,我想使用gulp.watch。如果直接运行任务,我不希望gulp-notify做任何事情。示例代码如下:

const
    debug = require("gulp-debug"),
    gulp = require("gulp"),
    notify = require("gulp-notify");

gulp.task("scripts:app", function () {
    return gulp.src(...)
        .pipe(debug({ title: "tsc" }))
        .pipe(...);                // <--- if i add notify here, 
                                   //      I will always get a notification
});

gulp.task("watch", function () {
    gulp.watch("ts/**/*.ts", ["scripts:app"]);
});

如果我在notify任务中输入'scripts:app',它将在每次运行任务时发出通知,无论该任务是如何启动的。同样,我想在观看任务完成时通知。

我考虑过添加依赖于'scripts:app:notify'的任务'scripts:app',但如果可能的话,我想避免创建“不必要的”任务。

我也尝试了以下内容:

gulp.watch("ts/**/*.ts", ["scripts:app"])
    .on("change", function (x) { notify('changed!').write(''); });

但是这会导致每个文件发生变化的通知。当任务完成时,我想要通知。

换句话说,如果我运行gulp scripts:app,我就不应该收到通知。当我运行gulp watch并更改已观看的文件时,我应该收到通知。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

尝试将params添加到构建脚本中:

function buildApp(notify){
    return gulp.src(...)
        .pipe(...)
        .pipe(function(){
            if (notify) {
                //drop notification
            }
        });
    });      
}

//Register watcher
gulp.watch("ts/**/*.ts", function(){
    var notify = true;
    buildApp(notify);
});

//Register task so we can still call it manually
gulp.task("scripts:app", buildApp.bind(null, false));

如您所见,buildApp是一个简单的功能。它可以通过观察者或正常的&#34;来呼叫。任务登记。