2016-07-09 6 views
0

Я пытаюсь удалить задачу из файла /dest, когда я удалю их из /src, но это не сработает. Где ошибка?Почему gulp-watch не удаляет файлы

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); 
 
     } 
 
    }); 
 
});

+0

не поймет, почему вы удалите файл в Глоток-часы. Лучше использовать удаление до начала сборки. – varit05

ответ

0

Ваши destFilePath указывает на файл, который не существует. Если вы удалите файл src/img/foo.png, то ваша destFilePath переменная заканчивается, указывая на build/foo.png вместо build/img/foo.png (в этом ваша задача img).

Причина в том, что вы применяете path.relative() к imgSrc, который содержит **. Однако path.relative() не отменяет глобусы. Он просто интерпретирует ** как обычное имя каталога. Таким образом, вы в конечном итоге отключите один каталог.

Вы должны оставить из ** при использовании path.relative():

if (event.type === 'deleted') { 
    var filePathFromSrc = path.relative(path.resolve('src/img'), event.path); 
    var destFilePath = path.resolve(imgDst, filePathFromSrc); 
    del.sync(destFilePath); 
} 
+0

Большое спасибо за ответ, он решил проблему. Но появился еще один. Когда я запускаю gulp-watch с пустым src/img, ничего не происходит (gulp-imagemin не запускается, когда я добавляю файлы в src/img), когда я начинаю с изображений в src/img, он начинает работать только после удаления файла , Я новичок в JS, так что было бы здорово, если бы вы могли дать мне объяснение. – BigKompot

+0

У меня нет объяснений. То, что вы описываете, не должно происходить. Я использовал ваш gulpfile, чтобы проверить, могу ли я воспроизвести проблему, и добавление файлов в 'src/img' всегда приводит к запущенной задаче' img' (пустой ли 'src/img' или нет). –