为什么gulp-watch不会删除文件

时间:2016-07-09 11:55:30

标签: javascript node.js gulp gulp-watch

当我从/dest删除文件时,我试图让我的gulp-watch任务删除/src目录中的文件,但它不起作用。 错误在哪里?



var watch = require('gulp-watch');
var imagemin = require('gulp-imagemin');
var del = require('del');
var pngquant = require('gulp-pngquant');

var imgSrc = 'src/img/**';
var imgDst = 'build/img';

gulp.task('del', function() {
  return del('build');

});

gulp.task('img', function() {
  return gulp.src(imgSrc)
    .pipe(debug({title: 'src'}))
    //.pipe(newer(imgDst))
    .pipe(imagemin())
    .pipe(debug({title: 'imagemin'}))
    .pipe(gulp.dest(imgDst))
    .pipe(debug({title: 'dest'}));
});

gulp.task('watch', function () {
    var watcher = gulp.watch(imgSrc, ['img']);

    watcher.on('change', function (event) {
        if (event.type === 'deleted') {
            var filePathFromSrc = path.relative(path.resolve(imgSrc), event.path);
            var destFilePath = path.resolve(imgDst, filePathFromSrc);
            del.sync(destFilePath);
        }
    });
});




1 个答案:

答案 0 :(得分:0)

您的destFilePath指向不存在的文件。如果您删除文件src/img/foo.png,则destFilePath变量最终会指向build/foo.png而不是build/img/foo.png(这是img任务所放置的位置)。< / p>

原因是您将path.relative()应用于包含imgSrc的{​​{1}}。但是**并没有取消整理。它只是将path.relative()解释为常规目录名称。所以你最终成了一个目录。

使用**

时,您需要忽略**
path.relative()