【问题标题】:How to make gulp remove deleted files while watching on a particular glob pattern?如何在观看特定 glob 模式时让 gulp 删除已删除的文件?
【发布时间】:2016-03-30 18:52:17
【问题描述】:

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

我是否必须明确处理已删除的事件,还是我遗漏了什么?

【问题讨论】:

    标签: gulp


    【解决方案1】:

    这个问题很老,但我认为它仍然相关。

    这是我提出的解决方案,基于 github issue 中的 ondaplana 答案以及所使用的 gulp 模块的文档:

    基本上,它使用 gulp-watch 代替 gulp 原生 watch 函数来管道 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      相关资源
      最近更新 更多