使用watch
任务构建gulp文件非常有用。在我的情况下,我有一个任务,它可以在php
目录中查看更改和lints /拷贝的更改,一个连接和复制的JS目录,以及在更改时编译为CSS的SASS。
如果我在监视任务运行的情况下检查另一个git分支,那么预计会发生疯狂,因为数百个文件会发生变化。可以解决的一个问题是watch
触发了通用任务 - 例如PHP只是简单地重新l和复制所有PHP文件,而不仅仅是改变的文件。因此,如果50个文件发生变化,整个堆栈将重新打印50次。同上JS(因为依赖)和SASS(因为它运行指南针,然后也看到每个文件都被更改)。
所以目前我的解决方案是杀死我的watch
任务(使用Sublime Gulp运行),然后签出一个新分支,然后重新运行它。我想象任何解决方案都需要修改Sublime Gulp
插件,或者阻止我使用它 - 如果有一个快捷方式让watch
任务运行在我的终端的背景,让我看看输出,但没有强迫我。
我知道git有钩子,所以我想象另一个解决方案可能是让一个checkout hook产生一个文件,可以作为临时停止签到监视任务,或类似的东西。
使用watch
的任何人都遇到了类似的问题,你会建议如何解决它?
答案 0 :(得分:7)
正如@Mushr00m对Gulp.js, watch task runs twice when saving files的回答中所述,您可以将debounceDelay
选项传递给gulp.watch()
。
debounceDelay {integer}连续调用的事件的延迟 相同的文件/事件
简而言之,只要您的所有更改同时发生,debounceDelay
将在触发您观看任务之前等待。根据我的经验,git通常非常快,因此您可以设置debounceDelay
500
或1000
,而不会对您的开发工作流程产生太大影响。
示例:
gulp.watch('/**/*.less', {debounceDelay: 2000}, ['less']);
我能够验证这是在挖掘文档。实际功能来自gaze。
答案 1 :(得分: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进程会导致你的分支观察者死机。不过,我把它设置得很顺利。