Następujące zadanie Gulpjs działa dobrze podczas edycji plików w dopasowaniu globalnym:
// watch task.
gulp.task('watch', ['build'], function () {
gulp.watch(src + '/js/**/*.js', ['scripts']);
gulp.watch(src + '/img//**/*.{jpg,jpeg,png,gif}', ['copy:images']);
gulp.watch(src + '/less/*.less', ['styles']);
gulp.watch(src + '/templates/**/*.{swig,json}', ['html']);
});
// build task.
gulp.task('build', ['clean'], function() {
return gulp.start('copy', 'scripts', 'less', 'htmlmin');
});
Jednak to nie działa (nie jest wyzwalane) dla nowych lub usuniętych plików. Czy jest coś, czego mi brakuje?
EDYCJA : nawet przy użyciu wtyczki grunt-watch wydaje się nie działać:
gulp.task('scripts', function() {
return streamqueue(
{ objectMode: true },
gulp.src([
vendor + '/jquery/dist/jquery.min.js',
vendor + '/bootstrap/dist/js/bootstrap.min.js'
]),
gulp.src([
src + '/js/**/*.js'
]).pipe(plugins.uglify())
)
.pipe(plugins.concat(pkg.name + '.min.js'))
.pipe(gulp.dest(dest + '/js/'));
});
gulp.task('watch', ['build'], function () {
plugins.watch({glob: src + '/js/**/*.js'}, function () {
gulp.start('scripts');
});
});
EDYCJA : rozwiązany, to był ten problem . Globy zaczynające się od ./
(taka była wartość src
) wydaje się nie działać ATM.
javascript
node.js
gulp
gremo
źródło
źródło
gulp-watch
np.gulp.watch('js/**/*.js', {cwd: src}, ['scripts']);
Odpowiedzi:
Edycja: Najwyraźniej
gulp.watch
działa teraz z nowymi lub usuniętymi plikami. Tak się nie stało, gdy zadano pytanie.Reszta mojej odpowiedzi jest nadal aktualna:
gulp-watch
jest zwykle lepszym rozwiązaniem, ponieważ pozwala wykonywać określone czynności tylko na zmodyfikowanych plikach, a jednocześniegulp.watch
pozwala wykonywać tylko kompletne zadania. W przypadku projektu o rozsądnych rozmiarach szybko stanie się to zbyt wolne, aby było przydatne.Niczego nie brakuje.
gulp.watch
nie działa z nowymi lub usuniętymi plikami. To proste rozwiązanie przeznaczone do prostych projektów.Aby uzyskać plik oglądanie że mogą szukać nowych plików, korzystania z
gulp-watch
wtyczki , która jest o wiele bardziej wydajny. Sposób użycia wygląda następująco:Osobiście polecam pierwszą opcję. Pozwala to na znacznie szybsze procesy na plik. Działa świetnie podczas programowania z livereload, o ile nie łączysz żadnych plików.
Możesz podsumować swoje strumienie za pomocą mojej
lazypipe
biblioteki lub po prostu używając funkcji istream-combiner
tak:AKTUALIZACJA 15 października 2014 r
Jak wskazał @pkyeck poniżej, najwyraźniej wersja 1.0
gulp-watch
nieznacznie zmieniła format, więc powyższe przykłady powinny teraz wyglądać tak:i
źródło
Oba
gulp.watch()
irequire('gulp-watch')()
będą wyzwalane dla nowych / usuniętych plików, jednak nie, jeśli używasz katalogów bezwzględnych. W moich testach nie"./"
używałem przy okazji katalogów względnych.Oba nie zostaną wyzwolone, jeśli zostaną usunięte całe katalogi.
źródło
./
na ich ścieżkach - w rzeczywistości wydaje się to złą praktyką - github.com/floatdrop/gulp-watch/issues/1gulp-watch
poprawnie nowe pliki lub usunięte pliki. Nie ma potrzeby!gulp.watch
robi to. Usunięcie wszystkich./
ze ścieżek rozwiązało problemy. Niesamowite.Jeśli
src
jest to ścieżka bezwzględna (zaczynająca się od/
), kod nie wykryje nowych ani usuniętych plików. Jednak wciąż jest sposób:Zamiast:
pisać:
i będzie działać!
źródło
{ cwd: src }
Wskazówkę było moje rozwiązanie. Dziękuję Ci bardzo!watch
{cwd:'./'}
i pozostaw wzór glob taki, jaki byłgulp.watch('src/js/**/*.js', {cwd: './'}, ['scripts']);
Globy muszą mieć określony oddzielny katalog podstawowy, a tej lokalizacji podstawowej nie można określać w samym globie.
Jeśli tak
lib/*.js
, będzie wyglądał pod bieżącym katalogiem roboczym, którym jestprocess.cwd()
Gulp używa Gaze do oglądania plików, aw dokumencie API Gulp widzimy, że możemy przekazać określone opcje Gaze do funkcji watch:
gulp.watch(glob[, opts], tasks)
Teraz w dokumencie Gaze możemy znaleźć, że bieżący katalog roboczy (glob base dir) jest
cwd
opcją.Co prowadzi nas do odpowiedzi Alexka:
gulp.watch('js/**/*.js', {cwd: src}, ['scripts']);
źródło
Wiem, że to starsze pytanie, ale pomyślałem, że rzucę rozwiązanie, które wymyśliłem. Żadna z wtyczek gulp, które znalazłem, nie powiadamia mnie o nowych lub zmienionych nazwach plików. Skończyło się na tym, że owijałem monokl w wygodną funkcję.
Oto przykład użycia tej funkcji:
Powinienem zauważyć, że gulpStart to również funkcja wygody, którą stworzyłem.
A oto rzeczywisty moduł zegarka.
Całkiem proste, co? Całość można znaleźć w moim zestawie startowym z łykiem: https://github.com/chrisdavies/gulp_starter_kit
źródło
utils
folderu)Ważne jest, aby pamiętać, że wygląda jak gulp.watch zgłasza tylko zmienione i usunięte pliki w systemie Windows, ale domyślnie nasłuchuje nowych i usuniętych plików w systemie OSX:
https://github.com/gulpjs/gulp/issues/675
źródło
Powinieneś używać „gulp-watch” dla nowych / zmienionych nazw / usuniętych plików zamiast gulp.watch
źródło