2016-04-25 19 views
6

Ho bisogno di guardare tutte le cartelle, inclusa quella corrente per le modifiche. Quindi ho usatoLa visualizzazione di './**/*.js' causa un utilizzo eccessivo della CPU

gulp.task('start',() => { 
    if (node) node.kill() 
    node = spawn('node', ['server.js'], { 
     stdio: 'inherit' 
    }) 
    node.on('close', function(code) { 
     if (code === 8) { 
      gulp.log('Error detected, waiting for changes...'); 
     } 
    }); 
}); 

gulp.watch(['./**/*.js'], ['start']); 

gulp.task('default', ['start', 'watch']); 

process.on('exit', function() { 
    if (node) node.kill() 
}); 

ma causa il 100% di utilizzo della CPU. Se lo uso solo su una singola cartella (che contiene il 99% di tutti i file che devono essere guardati) come 'api/**/*. Js` non c'è quasi nessun utilizzo della CPU.

Cosa sto sbagliando?

+0

Chiarire l'ovvio: sei sicuro che questo è l'unico cambiamento ('.' ->' api') tra l'uso di alta e bassa della CPU, o potrebbe qualcos'altro hanno cambiato tra i test? –

+0

L'attività di controllo non è responsabile dell'utilizzo della CPU. Per favore mostraci il tuo compito 'start' e cosa sta facendo. –

+0

@JamesThorpe Ho ricontrollato di nuovo. Quello che ho descritto nel post è ancora il caso. Ho anche aggiunto il codice 'start' alla domanda. – Hedge

risposta

11

Stai guardando tutti i file .js in tutte le directory e sottodirectory del progetto. Che include node_modules. A seconda del numero di dipendenze che hai nel tuo progetto e di quante dipendenze hanno queste dipendenze, potresti guardare migliaia di file .js.

Si dovrebbe limitare l'orologio glob ai soli directory in cui si trovano i file di origine:

gulp.watch(['api/**/*.js', 'app/**/*.js', ...], ['start']); 

In alternativa si può provare per escludere la cartella node_modules e altre cartelle che non contengono file di origine (come il tuo costruire cartella di destinazione):

gulp.watch(['api/**/*.js', '!node_modules/**/*.js', ...], ['start']); 
+0

oh come potrei mancarlo. Certo, era a causa di 'node_modules' – Hedge

14

sorso di watch ha avuto known CPU usage issues per quasi 2 anni. Questo perché gulp utilizza il polling (fs.watchFile) per rilevare le modifiche.

  • Questa è stata presumibilmente fissato a gulp 4.0 (che non è stato ancora rilasciato)
  • Per le versioni < 4, la raccomandazione soluzione è quello di aumentare l'intervallo di polling.

    gulp.watch('**/*.js', { interval: 2000 }, ...) 
    

    (il default è 100)

  • @Sven's advice è anche molto sana - c'è probabilmente alcun motivo per guardare i tuoi node_modules o costruire le cartelle.

Problemi correlati