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