eno*_*l76 15 git git-checkout gulp gulp-watch
git在开始结帐操作时会做什么?它写出锁文件还是什么?
我使用gulp,如果git正在积极执行结账操作,我希望它能"暂停"观察者.
我没关系,可能不得不"重新安置"一些东西,让文件观察者恢复正常.
小智 6
该函数gulp.watch()返回一个对象,其中包含一个end()可以调用的方法 - 请参阅glob-watcher模块中的定义.
你可以沿着这些方向做点什么:
var gulp = require('gulp');
function doGitCheckout(callback) {
console.log('doing checkout...');
setTimeout(function() {
console.log('done checkout...');
callback();
}, 1000);
}
var watcher;
gulp.task('watch:start', function() {
if (!watcher) {
watcher = gulp.watch('dist/**/*', ['build']);
console.log('started watcher');
}
});
gulp.task('watch:stop', function() {
if (watcher) {
watcher.end();
watcher = null;
console.log('stopped watcher');
}
});
gulp.task('git:checkout', ['watch:stop'], function(cb) {
console.log('isWatching = ' + !!watcher);
// Start the Git checkout...
doGitCheckout(function() {
// The Git checkout is finished!
gulp.start('watch:start', function() {
cb();
});
});
});
gulp.task('default', ['watch:start', 'git:checkout']);
Run Code Online (Sandbox Code Playgroud)
因此,当我们开始观看时,我们会保持对观察者对象的引用,并且如果正在运行则需要停止观察者.我们的Git任务依赖于watch:stop开始,然后启动Git checkout,并在完成时进行回调.回调启动任务watch:start,完成后,我们最终触发函数cb指示git:checkout已完成!
另一种方法是使用add(pattern)和remove(pattern)监视对象上的和将其关闭再打开,而不是破坏对象并重新创建它.