Как обработать уведомление в 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 }));
});