gulp 观看任务期间不总是观看

gulp watch not always watching during task

Gulp 几乎可以正常工作。它会正确地监视和 运行s 任务,除非它在 ​​运行ning 任务的中间,它不会总是监视与同一任务相关的文件以便 运行最后一个任务完成后再次执行任务。

[08:30:51] Starting 'composer'...
composer task
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Nothing to install or update
Generating autoload files
Process exited with code 0
[08:30:53] Finished 'composer' after 1.62 s

编辑:不要介意时间短;这只是一个不好的例子。我真正 运行 宁 运行s 在 10-15 秒内完成的任务,在这段时间内我可以进行其他相关更改并保存是现实的。

编辑 composer.lock 文件时触发。

编辑完composer.lock文件并开始运行ning任务后,在输出"composer task"期间再次编辑并保存composer.lock,

预期:任务完成后再次运行

实际:任务完成并且不会重新运行以适应自

以来发生的变化

我在 Ubuntu 上使用 gulp 手表。

并不是说 gulp.watch() 在你 运行 任务时没有在看。虽然 gaze 中有一个 debounceDelay option 可以防止相同的事件在特定时间 window 内触发,但它太短了,你不太可能 运行 进入它。您可以尝试将其设置为 0 以确保万无一失,但这可能会导致比它解决的问题更多的问题。

更可能的原因是 orchestrator 根本没有 运行 任务 if it is already running:

Orchestrator will ensure each task and each dependency is run once during an orchestration run even if you specify it to run more than once. [...] If you need it to run a task multiple times, wait for the orchestration to end (start's callback) then call start again.

实际上,我可以通过使用 setTimeout():

模拟一个较长的 运行ning 任务来重现您的问题
gulp.task('task', function (done) {
  setTimeout(done, 10000);
});

gulp.task('watch', function() {
  gulp.watch('some_file.txt', {debounceDelay:0}, ['task']);
});

我唯一能想到的解决方法是手动跟踪任务是否已经 运行ning 然后在执行任务完成后安排重新运行:

function runTask(taskName) {
  var running = false;
  var rerun = false;
  return function() {
    if (running) {
      rerun = true;
    }
    running = true;
    gulp.start(taskName, function() {
      if (rerun) {
        rerun = false;
        gulp.start(taskName);
      } else {
        running = false;
      }
    }); 
  };
}

gulp.task('task', function (done) {
  setTimeout(done, 10000);
});

gulp.task('watch', function() {
  gulp.watch('some_file.txt', {debounceDelay:0}, runTask('task'));
});