2015-02-11 16 views
11

Ho la seguente operazione nel mio gulpFile, creato da qualcun altro nella mia squadra:Impostare un compito Gulp come predefinito

gulp.task('serve', [], function(){ 
    gulp.run(
    'fonts', 
    'browsersync', 
    'watch' 
); 
}); 

vorrei lasciarlo da solo, ma ho anche voluto per mappare la compito predefinito per questa attività. Così ho provato:

gulp.task('default',['serve']); 

Sembrava di lavorare, in quanto viene eseguito il server, ma per qualche motivo l'operazione "guardare" non sta accadendo, non ricevo aggiornamento del browser sui cambiamenti.

Tutto funziona come pianificato se eseguo "gulp serve" ma non "gulp". Che cosa ho fatto di sbagliato?

EDIT: Ecco il compito orologio:

gulp.task('watch', ['styles', 'browsersync'], function() { //'default' 
    gulp.watch(
    [ 
     './app/assets/sass/**/*.scss', 
     './app/modules/**/*.scss' 
    ], ['styles']); 

    gulp.watch([ 
    './app/**/*.js', 
    './app/**/*.html' 
    ], function() { 
    reload(); 
    }); 

}); 
+0

Che aspetto ha il tuo compito di sorveglianza? – Seth

+0

Aggiunto alla domanda originale. Scusate. – Steve

risposta

13

prova ad aggiornare i compito di default per includere il compito orologio nel argomento di matrice invece di correre dentro serve. In questo modo:

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

Se si verifica la documentazione sulla Gulp asynchronous task support, in particolare l'ultimo esempio, vedrai che è possibile richiedere un compito dipendente di finire prima si suppone che il compito designato per iniziare.

var gulp = require('gulp'); 

// takes in a callback so the engine knows when it'll be done 
gulp.task('one', function(cb) { 
    // do stuff -- async or otherwise 
    cb(err); // if err is not null and not undefined, the run will stop, and note that it failed 
}); 

// identifies a dependent task must be complete before this one begins 
gulp.task('two', ['one'], function() { 
    // task 'one' is done now 
}); 

gulp.task('default', ['one', 'two']); 
6

gulp.run e gulp.start sono considerati cattiva pratica:

https://github.com/gulpjs/gulp/issues/426
https://github.com/gulpjs/gulp/issues/505

Purtroppo, la risposta qui sembra essere che il vostro collega non può capire veramente Gulp. Potresti non essere in grado di risolvere questo problema senza modificare il codice.

Senza più contesto, come l'intero file gulp, non riesco a riprodurre il tuo problema esatto. Tuttavia, la mia impressione è che abbia qualcosa a che fare con il modo in cui Gulp esegue le attività in modo asincrono/continuo. Potrebbe essere il caso che il tuo task 'default' stia uscendo prematuramente, perché gulp.run non viene eseguito in modo sincrono. In un modo o nell'altro, Gulp è confuso su quali attività devono aspettare su cosa, quando. Stai utilizzando due strumenti completamente diversi per gestire la tua sequenza di esecuzione.

Invece di gulp.run, il vostro compito 'servire' in realtà dovrebbe utilizzare le dipendenze per eseguire altri compiti:

gulp.task('serve', ['fonts', 'browsersync', 'watch']); 
gulp.task('default', ['serve']); 

Inoltre, vale la pena sottolineare che il vostro compito orologio è già elencando 'browsersync' come una dipendenza. Anche se non è tecnicamente errato (Gulp lo ignorerà la seconda volta), può portare a complicazioni e confusione e quindi probabilmente non è una buona idea. Se 'orologio' dipende 'browsersync', si può semplicemente rimuovere la dipendenza 'browsersync' da 'servire':

gulp.task('watch', ['styles', 'browsersync'], function() { 
    gulp.watch([ 
    './app/assets/sass/**/*.scss', 
    './app/modules/**/*.scss' 
    ], ['styles']); 

    gulp.watch([ 
    './app/**/*.js', 
    './app/**/*.html' 
    ], function() { 
    reload(); 
    }); 
}); 
gulp.task('serve', ['fonts', 'watch']); 
gulp.task('default', ['serve']); 

Questo dovrebbe ottenere il risultato che stai cercando.


Detto questo, se proprio insisti a seguire una cattiva pratica, si potrebbe provare a utilizzare gulp.run nel vostro compito 'default':

gulp.task('default', function() { 
    gulp.run('serve'); 
}); 

ho il sospetto il problema principale è che si stia mescolando l'utilizzo delle dipendenze delle attività dell'array e gulp.run, ma in entrambi i casi, gulp.run significa "sbagliare".

+0

Puoi anche dare un'occhiata ai documenti Gulp su come garantire che le attività asincrone siano eseguite in serie: https://github.com/gulpjs/gulp/blob/master/docs/API.md#async -task-support –

Problemi correlati