2015-03-25 6 views
18

Sto usando questo esempio Gulp Watch: https://github.com/floatdrop/gulp-watch/blob/master/docs/readme.md#starting-tasks-on-events.Gulp Watch eseguito una sola volta

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

quando l'eseguo sulla mia macchina Windows 8, funziona solo la prima volta che cambio un file:

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 

La prossima volta non succede nulla. Perché?

+0

Hai cambiato qualche file? Perché quando esegui gulp watch, sta guardando i file. Quando modifichi un file, la funzione in watch viene attivata. – blablabla

+1

Sì, forse non sono abbastanza chiaro. Sto cambiando file, ma 'watch' viene eseguito solo la prima volta che cambio un file. Per esempio.se avvio 'gulp watch', cambio qualcosa nel mio file * .js e lo salvo, l'orologio è in esecuzione. Se poi cambio qualcos'altro nello stesso file e lo salvo di nuovo, quindi guardare non è in esecuzione. Il processo 'gulp watch' è ancora in esecuzione, ma non succede nulla. – dhrm

+0

Se si desidera ancora usare 'gulp-batch' l'uso corretto è di avere una richiamata' done': 'done' - è il callback per il segnale di funzione al batch, che si è fatto. Quindi: 'gulp.task ('watch', function() { watch ('**/*. Js', batch (function (events, done) { gulp.start ('build'); \t \t done(); }); ' – nemesv

risposta

13

Se leggete attentamente la documentazione, si vede la seguente frase:

È possibile passare richiamata pianura, che si chiamerà su ogni evento o avvolgerla in un sorso-batch per eseguirlo volta

Quindi, questo è fondamentalmente l'accordo con gulp-batch. Per guardare costantemente, basta rimuovere la chiamata lotto:

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

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

(e aggiungere la richiamata 'fatto' per build per far Gulp sapere quando hai finito).

Btw ... Non sono sicuro, ma penso che lo gulp-watch non sia solo per guardare i file, ma anche per restituire direttamente un oggetto in vinile. Quindi, in realtà utilizzando il built-in gulp.watch dovrebbe avere lo stesso effetto:

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

Vecchio post, ma lemme cita qualcosa di nuovo da ciò che @ddprrt ha detto, ' "(e aggiungi il callback 'done' da compilare per far sapere a Gulp quando hai finito) . "' E quasi mi ha fatto battere la testa sul muro per ore. Grazie uomo – Temitayo

3

Ho avuto lo stesso problema e ho usato la stessa ddprrt. La differenza stava nell'usare il carattere jolly di directory come indicato nel percorso assoluto.

ho cambiato questo:

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

a questo:

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

Lo stesso problema e la stessa soluzione qui. Magari aprire un problema su github su questo sarebbe una buona ideia. –

+1

Ho avuto lo stesso problema e ho risolto aggiungendo la directory jolly /**/*.scss, ora funziona –

0

Questo problema mi ha fatto impazzire per un fine settimana. Ho provato tutto:

  • Add fatto() - Evento
  • Rename/Touch/Bersagli CSS
  • essere più precisi con i filepaths

Ma la (ragione di questo problema e) la soluzione è stata così facile che dopo mi sono sentito patetico:

Solo update your nodejs installation, il mio era 0.12.x! Non c'è da stupirsi che questo non ha funzionato.

Dopo questo l'orologio funziona di nuovo. A volte va anche storto di nuovo. Ma in questo caso basta salvare il file una seconda volta e viene riconosciuto. (Penso che lo foundation/gulp watch controlli le modifiche veloci e che il file venga sostituito con il nuovo file caricato)

Problemi correlati