使用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
设置为500
或1000
,而不会对您的开发工作流程产生太大影响。
示例:
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进程将杀死您的分支观察程序。不过,我设置了这个,它运行得非常顺利。