2014-06-19 3 views
8

Ich habe eine Schluckaufgabe, die Bilder mit gulp-imagemin komprimiert. Wenn ich diesem Verzeichnis neue Dateien hinzufüge, möchte ich diese Aufgabe ebenfalls komprimieren. Ich habe gelesen, dass gulp.watch doesn't trigger on new files und dass ich Schluck-Uhr versuchen sollte, also habe ich es so verwendet;Warum lösen neu hinzugefügte Dateien meine gulp-watch-Aufgabe nicht aus?

gulp.task('images', function() { 
    watch({glob: './source/images/*'}, function (files) { 
    return files 
     .pipe(plumber()) 
     .pipe(imagemin({ 
     progressive: true, 
     interlaced: true 
     })) 
     .pipe(gulp.dest('./www')); 
    }); 
}); 

Dies funktioniert genauso wie gulp.watch auf dem ersten Lauf, aber wenn ich ein neues Bild in das Verzeichnis, es passiert nichts hinzuzufügen. Wenn ich jedoch eine vorhandene Datei überschreibe, führt sie die Task erneut aus, so dass sie sich anders verhält.

Die Dokumentation auf gulp-watch nannte diese "Batch-Modus" und sagte, ich könnte die Aufgabe auch auf einer Datei-Basis ausführen, also habe ich auch diesen Weg versucht;

gulp.task('images', function() { 
    gulp.src('./source/images/*') 
    .pipe(watch()) 
    .pipe(plumber()) 
    .pipe(imagemin({ 
     progressive: true, 
     interlaced: true 
    })) 
    .pipe(gulp.dest('./www')); 
}); 

Aber nichts hat sich geändert. Warum werden meinem Bildverzeichnis keine Dateien hinzugefügt, die die Aufgabe auslösen?

+0

möglich Duplikat [Gulps gulp.watch nicht für neue oder gelöschte Dateien ausgelöst?] (Http://stackoverflow.com/questions/22391527/gulps-gulp-watch-not-triggered -for-new-or-deleted-files) – Rimian

Antwort

8

Am wahrscheinlichsten werden solche Art von Fragen zu gaze-Paket und seinen internen Prozessen umgeleitet, die komplizierte Überwachungsprozeduren auf Ihrem Betriebssystem ausführt. In diesem Fall sollten Sie images/**/* passieren Option glob, so werden alle Blicke (einschließlich neue) Dateien in Bilder-Verzeichnis sehen:

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

gulp.task('default', function() { 
    watch({glob: 'images/**/*'}, function (files) { 
     files.pipe(imagemin({ 
     progressive: true, 
     interlaced: true 
     })) 
     .pipe(gulp.dest('./www')); 
    }); 
}); 

Aber dieses Problem zu beheben füllt nicht Fall, wenn Sie leer Bilder Verzeichnis haben. Wenn Sie sie sehen wollen, übergeben Sie ['images', 'images/**/*'] an glob, und es wird das Verzeichnis sehen, das anfänglich leer ist.

Ps.s. Außerdem brauchst du in diesem Fall gulp-plumber nicht, weil die Uhr die Funktion erneut ausführt, die imagemin jedes Mal verwendet, auch wenn imagemin einen Fehler anzeigt.

+3

Danke! Ich habe das "./" von der Quelle/images/entfernt und es funktioniert jetzt! – arkanciscan

15

ein zusätzliches Argument {cwd:'./'} in gulp.watch Hinzufügen arbeitete für mich:

gulp.watch('src/js/**/*.js',{cwd:'./'},['scripts']); 

2 Dinge diese Funktion zu erhalten:

Vermeiden ./ in der Datei/Ordner Muster

Sicherstellen ./ im Wert für cwd

Viel Glück.

Ref: - https://stackoverflow.com/a/34346524/4742733

Verwandte Themen