2015-03-25 51 views
18

Bu Gulp Watch örnek kullanıyorum: https://github.com/floatdrop/gulp-watch/blob/master/docs/readme.md#starting-tasks-on-events.Gulp Watch Sadece bir kez çalıştır

C:\test>gulp watch 
[08:40:21] Using gulpfile C:\test\gulpfile.js 
[08:40:21] Starting 'watch'... 
[08:40:21] Finished 'watch' after 2.69 ms 
[08:40:31] Starting 'build'... 
Working! 
[08:40:31] Finished 'build' after 261 µs 

dahaki sefere hiçbir şey olmaz:

benim Windows 8 makinede çalıştırmak
var gulp = require('gulp'); 
var watch = require('gulp-watch'); 
var batch = require('gulp-batch'); 

gulp.task('build', function() { console.log('Working!'); }); 

gulp.task('watch', function() { 
    watch('**/*.js', batch(function() { 
     gulp.start('build'); 
    })); 
}); 

, sadece bir dosyayı değiştirmek ilk kez çalışır. Niye ya? yakından belgeleri okursanız

+0

Herhangi bir dosyayı değiştirdiniz mi? Çünkü sen, gulp seyrettirdiğinde, dosyaları izliyorsun. Daha sonra bir dosyayı değiştirdiğinizde saatteki işlev tetiklenir. – blablabla

+1

Evet, belki yeterince açık değilim. Dosyaları değiştiriyorum, ancak 'watch' sadece bir dosyayı değiştirdiğimde ilk kez çalıştırılıyor. Örneğin.eğer "gulp watch" ı başlatırsam, * .js dosyasında bir şey değiştir ve kaydet, izle. Daha sonra aynı dosyada başka bir şey değiştirir ve tekrar kaydedersem, o zaman seyretmez. “Yemin izle” süreci hala çalışıyor, ama hiçbir şey olmuyor. – dhrm

+0

Eğer hala "gulp-batch" 'ı kullanmak istiyorsanız, doğru kullanım bir "bitti" geri arama yapmaktır: "done" - fonksiyon sinyalinizin toplu iş için geri çağrılmasıdır, işiniz bitti. Yani: gulp.task ('izle', işlev() { izle ('**/*. Js', toplu iş (olaylar (olaylar, bitti)) { gulp.start ('yapı'); \t \t tamamlandı(); })); – nemesv

cevap

13

, aşağıdaki ifadeyi bakın:

Sen düz geri arama geçebilir

, her olayın çağrıda veya yudum-toplu sar olacağını çalıştırmak için o kez

Yani, bu temelde gulp-batch ile anlaşma. sürekli izlemek için, sadece toplu görüşmesini kaldırmak:

gulp.task('build', function (done) { 
    console.log('Working!'); 
    done(); 
}); 

gulp.task('watch', function() { 
    watch('app/*.js', function() { 
     gulp.start('build'); 
    }); 
}); 

(ve Bunları tamamladığınızda Gulp bildirmek için build 'done' geri arama ekleyin).

Btw ... Emin değilim, ama sanırım gulp-watch sadece dosyaları izlemek değil, aynı zamanda doğrudan bir vinil nesneyi döndürmek anlamına gelir. Yani aslında kullanarak yerleşik gulp.watch aynı etkiye sahip olmalıdır:

gulp.task('watch', function() { 
    gulp.watch('app/**/*.js', ['build']); 
}); 
+0

Eski gönderi ama lemme, bir şeyden daha alıntı yaptı @ddprrt, '" (ve bitirdiğinizde, Gulp'in bildirmesini sağlamak için 'bitti' geri çağrısını ekleyin) " Ve bu neredeyse beni kafamda saatlerce duvara çarptı. Teşekkürler – Temitayo

3

Ben aynı sorunu vardı ve ddprrt aynı kullandı. Fark, mutlak yola atanmış olarak dizin joker karakterini kullanıyordu.

gulp.task('watch', function() { 
    gulp.watch('sass/**/*.scss', ['sass']) 
}); 
+1

Aynı sorun ve aynı çözüm burada. Belki bu konuda github bir konu açmak iyi bir ideia olacaktır. –

+1

Aynı sorunu yaşadım ve /**/*.scss joker karakterini ekledim, şimdi işe yarıyor –

0

Bu sorun bir hafta sonu için beni deli yaptı: Buna

gulp.task('watch', function() { 
    gulp.watch('sass/shortcutcss/*.scss', ['sass']) 
}); 

:

Ben bu değişti. Denedim bütün:

  • Add) (tamamlandı -
  • isim ver/Dokunmatik/Temizle hedef CSS
  • filepaths

Ama (Bu soruna ve nedeni) ile daha spesifik olun Olay Çözüm o kadar kolaydı ki, bundan sonra acıklı hissettim:

Sadece update your nodejs installation, benimki 0.12.x! Bu işe yaramazsa şaşmamalı.

Bundan sonra saat etkinliği tekrar çalışır. Bazen de tekrar ters gider. Ancak bu durumda, dosyanızı ikinci kez kaydedin ve kabul edilir. (Sanırım foundation/gulp watch hızlıca değişiklik olup olmadığını kontrol eder ve dosyanız yeni yüklenen dosya ile değiştirilir)