如何在观看特定的glob模式时让gulp删除已删除的文件?

时间:2015-04-20 12:02:10

标签: gulp

我在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/文件夹中删除已删除的文件。

我是否必须明确处理已删除的事件,或者我错过了哪些内容?

1 个答案:

答案 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'));

文档:

Gulp recipes