gulp.watch在保存多个文件时多次运行同一任务

gulp.watch在保存多个文件时多次运行同一任务,gulp,gulp-watch,Gulp,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: 50

有没有办法将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) 

    );
  };
};
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));
..当我一次保存多个关注的文件时(在文本编辑器中保存所有文件),我的gulp.series(我使用的是gulp 4.0)任务将针对每个更改的文件运行一次。有没有办法改变这一点,让gulp.watch只运行一次gulp.series任务


谢谢..

我添加了一个“缓冲区”功能,如下所示:

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) 

    );
  };
};
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
[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
[21:40:17]正在启动“”。。。
[21:40:17]正在启动“”。。。
[21:40:18]正在启动“typescript”。。。
[21:40:21]在3.16秒后完成“打字脚本”
[21:40:21]正在启动“brsync_重新加载”。。。
[21:40:21]在2.73毫秒后完成“brsync_重新加载”
…当我更改3个文件(2个typescripe,1个手写笔)时,输出为:

[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
[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
[21:41:19]正在启动“”。。。
[21:41:19]正在启动“”。。。
[21:41:19]正在启动“”。。。
[21:41:19]正在启动“”。。。
[21:41:19]正在启动“”。。。
[21:41:19]正在启动“”。。。
[21:41:20]正在启动“typescript”。。。
[21:41:22]在2.02秒后完成“打字脚本”
[21:41:22]开始“风格”。。。
[21:41:23]1.82秒后完成“样式”
[21:41:23]正在启动“brsync_重新加载”。。。
[21:41:23]在1.92毫秒后完成“brsync_重新加载”
很好地工作,只有这些匿名函数的日志是恼人的(