Как мне обработать уведомление в 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, последнее сообщение "Все задачи завершено" срабатывает [n-1] раз, где n - количество подзадач.
Что заставляет это последнее уведомление вызываться так много раз и как это может быть подавлено?
2 ответа
Я полагаю, вы пытались добавить вызов gulp-notify в конце каждой задачи и один в конец общей задачи, которая зависит от предыдущих.
Таким образом, проблема, вероятно, связана с тем, что задачи не сообщают правильно свой "законченный статус" основной задаче. В этом разделе вы можете проверить последовательно Выполняемые задачи, например рецепт зависимости от задачи или всегда удобный пакет последовательности выполнения.
Обновить
Чтобы дать задаче понять, что ее подзадачи выполнены, нужно заставить их вернуть поток, поэтому в примере кода подзадачи могут просто возвращать gulp.src
труба.
gulp-notify при вызове со строковым сообщением выведет это сообщение для каждого файла, присутствующего в переданном потоке, поэтому в последнем задании примера оно будет вызвано дважды. Вызов gp_notify должен быть изменен на: gp_notify({сообщение: "Все задачи выполнены." , OnLast: true }). Таким образом, сообщение будет уведомлено только для последнего файла.
По умолчанию, gulp-notify
отправляет уведомления для каждого файла в потоке. Если вам нужно только одно уведомление для каждого потока, добавьте onLast: true
к опциям, переданным notify()
, например
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 }));
});