BigKompot
@BigKompot

Почему gulp-watch работает через раз?

Не могу понять странного поведения gulp-watch. При запуске может работать корректно, потом перестает реагировать.
На вотчер повешен gulp-imagemin и обработчик событий, который должен удалять файлы из папки /build при их удалении из исходников.
Подскажите, пожалуйста, в каком направлении искать ошибку?
var watch = require('gulp-watch');
var imagemin = require('gulp-imagemin');
var del = require('del');
var pngquant = require('gulp-pngquant');
var path = require('path');

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

gulp.task('del', function() {
    console.log('---------- Удаляю build/');
    return del('build');
});

gulp.task('img', function() {
  return gulp.src(imgSrc)
    .pipe(debug({title: 'src'}))
    .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);
        }
    });
});
  • Вопрос задан
  • 284 просмотра
Решения вопроса 1
BigKompot
@BigKompot Автор вопроса
Проблема заключалась в том, что destFilePath ссылался на несуществующий файл.
Как оказалось, 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);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы