我在glob上有一个gulp watch任务,寻找更改并更新输出文件夹。它能够成功更新已更改的文件,添加新文件但无法删除已删除的文件。
回调如下:
var cb = function (event) {
console.log('Moving assets...');
return gulp.src('app/assets/**/*', {base: 'app'})
.pipe(changed('build/assets'))
.pipe(gulp.dest('build'));
};
gulp watch任务是这样的:
gulp.watch('app/assets/**/*', cb);
我知道gulp watch运行正常,因为回调会收到所有已删除的事件。但回调本身无法从build/assets/
文件夹中删除已删除的文件。
我是否必须明确处理已删除的事件,或者我错过了哪些内容?
答案 0 :(得分:1)
这个问题已经过时了,但我认为这仍然很重要。
这是我提出的解决方案,基于此github issue中的ondaplana答案以及所使用的gulp模块的文档:
基本上,它使用gulp-watch而不是gulp本地监视功能来管道gulp-filter和del模块。
var filter = require('gulp-filter');
var vinylPaths = require('vinyl-paths');
var del = require('del');
var watch = require('gulp-watch');
var notDeletedFilter = filter(
function(file) {
return file.event !== 'unlink' && file.event !== 'unlinkDir';
},
{restore: true}
);
notDeletedFilter.restore
.pipe(gulp.dest('dist'))
.pipe(vinylPaths(del));
//use gulp-watch instead of gulp native watch function
watch(['app/assets/**/*'], {events: ['add', 'change', 'unlink', 'unlinkDir']})
.pipe(notDeletedFilter)
.pipe(anyModule())
.pipe(gulp.dest('build'));
文档: