2016-07-09 14 views
0

Ich versuche, meine Schluck-Watch-Aufgabe zum Löschen von Dateien aus /dest Verzeichnis, wenn ich sie löschen von /src, aber es funktioniert nicht. Wo ist der Fehler?Warum Schluck-Watch löscht keine Dateien

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

würde es nicht verstehen, warum Sie Datei in schluck-Uhr Löschen werden. Lieber Löschen, bevor Build gestartet wird. – varit05

Antwort

0

Ihre destFilePath auf eine Datei, die nicht existiert. Wenn Sie eine Datei löschen src/img/foo.png Ihre destFilePath Variable endet auf build/foo.png anstelle von build/img/foo.png (wo ist Ihre img Aufgabe hat es).

Der Grund ist, dass Sie path.relative() auf imgSrc anwenden, die ** enthält. Allerdings path.relative() nicht verstehen, Globs. Es interpretiert nur ** als regulären Verzeichnisnamen. Sie enden damit, ein Verzeichnis aus zu sein.

Sie müssen die ** auszulassen, wenn Sie path.relative() verwenden:

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

Vielen Dank für die Antwort, es hat das Problem gelöst. Aber da ist noch einer erschienen. Wenn ich gulp-watch mit einem leeren src/img starte, passiert nichts (gulp-imagemin startet nicht, wenn ich Dateien zu src/img hinzufüge), wenn ich mit Bildern in src/img beginne beginnt es erst nach dem Löschen der Datei . Ich bin neu in JS, also wäre es großartig, wenn Sie mir eine Erklärung geben könnten – BigKompot

+0

Ich habe keine Erklärung. Was du beschreibst, sollte nicht passieren. Ich habe deine gulp-Datei benutzt, um zu sehen, ob ich das Problem reproduzieren kann und das Hinzufügen von Dateien zu 'src/img' führt immer dazu, dass die' img'-Aufgabe ausgeführt wird (ob 'src/img' leer ist oder nicht). –

Verwandte Themen