如何在git分支发生变化时重新启动gullow watch



使用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时遇到过类似的问题,您建议如何解决?

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

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

简而言之,只要您的所有更改同时发生,debounceDelay就会在触发您监视的任务之前等待。根据我的经验,git通常很快,所以您可以将debounceDelay设置为5001000,而不会对您的开发工作流程产生太大影响。

示例:

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

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

我正在使用永久监视器为我的监视器设置子进程,我意识到我可以将.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之类的东西,将很难重新启动它,因为在系统级别杀死gullow进程将杀死您的分支观察程序。不过,我设置了这个,它运行得非常顺利。

相关内容

最新更新