Могу ли я сглотнуть уведомление о завершении отслеживаемой задачи?

У нас есть gulpfile с ~12 задачами, 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 ответ

Решение

Попробуйте добавить параметры в ваш скрипт сборки:

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 это простая функция. Он вызывается через наблюдателя или "обычную" задачу регистрации.

Другие вопросы по тегам