4

使用任务让gulp构建文件很有用。watch在我的例子中,我有一个任务,它监视一个php目录的更改和更改时的 lints/副本,一个连接和复制的 JS 目录,以及一个在更改时编译为 CSS 的 SASS。

如果我在运行 watch 任务的情况下签出另一个 git 分支,那么预计会发疯,因为实际上有数百个文件发生了变化。一个可以解决的问题是watch触发了通用任务——例如 PHP 任务只是简单地重新整理和复制所有 PHP 文件,而不仅仅是更改的那个。因此,如果 50 个文件发生更改,整个堆栈将重新 linted 50 次。同样适用于 JS(因为依赖项)和 SASS(因为它运行 compass,然后它也会看到每个文件都已更改)。

所以目前我的解决方案是终止我的watch任务(使用Sublime Gulp运行),然后签出一个新分支,然后重新运行它。我想任何解决方案都需要修改Sublime Gulp插件,或者阻止我使用它 - 如果有一个快速的快捷方式可以让watch任务在我的终端后台运行并允许我查看输出但不要强迫我。

我知道 git 有钩子,所以我想另一种解决方案可能是让结帐钩子生成一个文件,该文件可以作为监视任务的临时停止标志,或类似的东西。

任何人都遇到过类似的问题watch,您建议如何解决?

4

2 回答 2

7

正如@Mushr00m对 Gulp.js 的回答中所指定的,watch 任务在保存文件时运行两次,有一个debounceDelay选项可以传递给gulp.watch().

debounceDelay {integer} 为同一文件/事件连续调用的事件延迟

简而言之,只要您的所有更改同时发生,debounceDelay就会等待触发您观看的任务。以我的经验,git 通常很快,所以你可以设置一个debounceDelay,也许对你5001000开发工作流程没有太大影响。

例子:

gulp.watch('/**/*.less', {debounceDelay: 2000}, ['less']);

我能够通过文档来验证这一点。实际功能来自凝视

于 2014-12-21T15:01:01.920 回答
4

我正在使用forever-monitor为我的观察者设置子进程,并且我意识到我可以将观察.git/HEAD作为重新启动显示器的触发器。

我的代码如下所示:

return watch('./.git/HEAD', {name: 'Branch watcher'}, function(events, done) {
  monitors.forEach(function(monitor) {
    monitor.restart();
  });
});

您可以轻松地将我的monitor管理替换为任何其他代码以在分支更改时执行:

return watch('./.git/HEAD', {name: 'Branch watcher'}, function(events, done) {
  // Do what needs to be done on branch change
});

如果你有另一个手表正在运行,那么如果不使用类似的东西就很难重新启动它forever-monitor,因为在系统级别杀死 gulp 进程会杀死你的分支观察者。不过,我设置了这个,它工作得非常顺利。

于 2015-01-16T17:47:56.817 回答