2015-09-14 2 views
2

Есть ли способ настроить gulp.watch для запуска задачи только один раз при изменении нескольких просмотренных файлов? У меня есть настройки задачи, как это:gulp.watch выполняет одно и то же задание несколько раз при сохранении большого количества файлов

var bs = require('browser-sync').create(); 

module.exports = function (gulp, plugins, config) { 
    return function watch() { 
    gulp.watch( 

     config.source.javascript, 
     // {debounceDelay: 500}, 
     gulp.series('js', 'wp', bs.reload) 

    ); 
    }; 
}; 

ой когда я сохраняю несколько Смотрели файлы одновременно (Сохранить все в текстовом редакторе), мои gulp.series (я использую глотку 4.0) задачи запускается один раз для каждого измененного файла. Есть ли способ изменить это и заставить gulp.watch запускать задачи gulp.series только один раз?

Спасибо ..

ответ

1

Я добавил функцию 'буфер', как это:

var reload = false; 
var delay = 500; 

function brsync_reload(done) { brsync.reload();     queue_reset(done); } 
function brsync_stream(done) { brsync.reload({ stream: true }); queue_reset(done); } 

function queue_reload() { gulp.series(gulp.queue.concat(brsync_reload))(); } 
function queue_stream() { gulp.series(gulp.queue.concat(brsync_stream))(); } 
function queue_reset(done) { gulp.queue = []; reload = false; done(); } 

function queue_tasks(tasks, last) { 
    reload = reload || last == brsync_reload; 
    gulp.queue = gulp.queue || []; 

    if (gulp.queue.length == 0) 
    setTimeout(reload ? queue_reload : queue_stream, delay); 

    gulp.queue = gulp.queue 
    .concat(tasks.filter(task => !gulp.queue.some(queued => queued == task))); 
    // console.log(gulp.queue); 
} 

brsync.init(CONFIG.BRSYNC); 

gulp.watch(CONFIG.SRC.JAVASCRIPT, () => queue_tasks(['javascript'], brsync_reload)); 
gulp.watch(CONFIG.SRC.STATIC,  () => queue_tasks(['static'], brsync_reload)); 
gulp.watch(CONFIG.SRC.STYLES,  () => queue_tasks(['styles'], brsync_stream)); 
gulp.watch(CONFIG.SRC.TYPESCRIPT, () => queue_tasks(['typescript'], brsync_reload)); 

Теперь, когда я изменить один выходной файл:

[21:40:17] Starting '<anonymous>'... 
[21:40:17] Starting '<anonymous>'... 
[21:40:18] Starting 'typescript'... 
[21:40:21] Finished 'typescript' after 3.16 s 
[21:40:21] Starting 'brsync_reload'... 
[21:40:21] Finished 'brsync_reload' after 2.73 ms 

... когда я меняю 3 файла (2x typecripe, 1x stylus), выход:

[21:41:19] Starting '<anonymous>'... 
[21:41:19] Starting '<anonymous>'... 
[21:41:19] Starting '<anonymous>'... 
[21:41:19] Starting '<anonymous>'... 
[21:41:19] Starting '<anonymous>'... 
[21:41:19] Starting '<anonymous>'... 
[21:41:20] Starting 'typescript'... 
[21:41:22] Finished 'typescript' after 2.02 s 
[21:41:22] Starting 'styles'... 
[21:41:23] Finished 'styles' after 1.82 s 
[21:41:23] Starting 'brsync_reload'... 
[21:41:23] Finished 'brsync_reload' after 1.92 ms 

Хорошо работает, только эти журналы анонимных функций раздражают (;

Смежные вопросы