Как обработать уведомление в 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." }))
});
в консоли уведомления теперь синхронизированы правильно, однако в конце выполнения, прямо перед завершенной "mainTask" после xx МС окончательное сообщение "все задачи завершены" срабатывает [n-1] раз, где n-количество подзадач.
что заставляет это окончательное уведомление срабатывать так много раз и как это можно подавить?
2 ответов
Я думаю, вы пытались добавить вызов gulp-notify в конце каждой задачи и один до конца общей задачи, которая зависит от предыдущих.
таким образом, проблема, вероятно, связана с задачами, неправильно сообщающими их "законченный статус" основной задаче. Для этой темы вы можете проверить выполнение задач последовательно, т. е. зависимость задач рецепт или всегда пригодится выполнить-последовательность пакет.
обновление
чтобы задача знала, что ее подзадачи выполнены, нужно заставить их вернуть поток, чтобы в примере кода подзадачи могли просто вернуть gulp.src
трубы.
залпом-уведомить при вызове со строковым сообщением будет выводить это сообщение для каждого файла, присутствующего в переданном потоке, поэтому в конечной задаче примера он будет вызываться дважды. Вызов 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 }));
});