2014-06-19 14 views
8

Mam zadanie, które wykorzystuje Gulp-imagemin do kompresowania obrazów. Kiedy dodaję nowe pliki do tego katalogu, chciałbym, aby to zadanie również je skompresowało. Czytałem, że gulp.watch doesn't trigger on new files i że powinienem spróbować łykać-oglądać, więc użyłem go tak;Dlaczego nowo dodane pliki nie uruchamiają mojego zadania gulp-watch?

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

Działa to tak samo jak gulp.watch przy pierwszym uruchomieniu, ale po dodaniu nowego obrazu do katalogu nic się nie dzieje. Jeśli jednak nadpisze istniejący plik, JEDEN uruchamia to zadanie ponownie, więc zachowuje się inaczej.

Dokumentacja na Gulp-Watch nazywała to "Tryb wsadowy" i powiedziała, że ​​mogę również uruchomić to zadanie dla każdego pliku, więc próbowałem również;

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

Ale nic się nie zmieniło. Dlaczego nie dodajesz plików do katalogu obrazów uruchamiając zadanie?

+0

możliwe duplikat [łykami nie gulp.watch uruchamia nowe lub usunięte pliki?] (Http://stackoverflow.com/questions/22391527/gulps-gulp-watch-not-triggered -do-nowych-lub-usuniętych-plików) – Rimian

Odpowiedz

8

Najprawdopodobniej tego rodzaju pytania są przekierowywane na pakiet gaze i jego wewnętrzne procesy, które uruchamiają skomplikowane procedury oglądania w systemie operacyjnym. W takim przypadku należy podać images/**/* do glob opcji, więc wzrok będzie oglądać wszystkie (w tym nowych) pliki obrazów w katalogu:

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

Ale to nie wypełnić rozwiązać sprawę, gdy masz pustą zdjęć katalogu. Jeśli chcesz je obejrzeć, przekaż ['images', 'images/**/*'] do globu, a zobaczysz katalog, który początkowo jest pusty.

P.s. również nie musisz gulp-plumber w tym przypadku, ponieważ zegarek ponownie uruchomi funkcję, która używa imagemin za każdym razem, nawet gdy imagemin wyskakuje błąd.

+3

Dzięki! Usunąłem "./" ze źródła/images/i działa teraz! – arkanciscan

15

Dodawanie dodatkowy argument {cwd:'./'} w gulp.watch pracował dla mnie:

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

2 rzeczy uzyskać tej pracy:

Unikać ./ we wzorach plików/folderów

Zapewnienie ./ w wartości dla cwd

Powodzenia.

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

Powiązane problemy