当我的"watch"任务正在运行时,如果我保存一个文件,则会触发"默认"的任务集合。如果我在"默认"任务完成之前再次保存文件,则会开始另一个"默认"任务,导致多个"默认"任务并发运行。
我已经通过检查"默认"任务是否在运行,来解决这个问题,但是当我保存文件后快速进行微小的调整并再次保存时,这种方法会导致一些减速问题。这样做意味着只有第一个更改被编译,我必须等待整个过程完成,然后再次保存才能编译新的更改。
我的想法是在触发新的任务时杀死所有旧的"默认"任务。这样,同一任务的多个副本就不会同时运行,但是我可以依赖最新的代码进行编译。
我进行了一些研究,但是找不到与我的情况相匹配的内容。
如何杀死所有旧的gulp任务,而不杀死"watch"任务?
编辑1:当前的工作理论是将"默认"任务集合存储为变量,然后以某种方式使用它来终止进程,但是这似乎并不像我期望的那样工作。下面是我的"watch"任务以供参考。
// watch task, runs through all primary tasks, triggers when a file is saved
GULP.task("watch", () => {
// set up a browser_sync server, if --sync is passed
if (PLUGINS.argv.sync) {
CONFIG_MODULE.config(GULP, PLUGINS, "browsersync").then(() => {
SYNC_MODULE.sync(GULP, PLUGINS, CUSTOM_NOTIFIER);
});
}
// watch for any changes
const WATCHER = GULP.watch("src/**/*");
// run default task on any change
WATCHER.on("all", () => {
if (!currently_running) {
currently_running = true;
GULP.task("default")();
}
});
// end the task
return;
});
编辑2: 经过更深入的思考,也许这更多是一个Node.js问题而不是Gulp问题——我该如何停止来自函数外部的处理函数?基本上,我想以某种方式将正在执行的函数存储为变量,并在需要重新启动它时终止它。