2014-06-11 18 views
5

Fondamentalmente voglio impostare il mio compito in modo che se lo faccio, io guarderò gulp less --watch, altrimenti eseguo semplicemente la compilazione. Questo è quello che ho finora:Abilitare gulp-watch in modo condizionale con gulp-if (o qualcos'altro)

'use strict'; 

var gulp = require('gulp'); 
var less = require('gulp-less'); 
var gulpif = require('gulp-if'); 
var watch = require('gulp-watch'); 
var cli = require('minimist')(process.argv.slice(2)); 

gulp.task('less', function() { 
    return gulp.src(['./client/styles/styles.less', './client/styles/libs.less']) 
    .pipe(less({ sourceMap: !cli.production })) 
    .pipe(gulp.dest('./dist/styles')) 
    .pipe(gulpif(cli.watch, watch())); 
}); 

Quello che succede è che si esegue ancora la watch, ma non passa alcun file. Questo impedisce anche il compito da process.exit() ing ..

sto assumendo che devo o avvolgerlo in qualcosa, o di utilizzare un metodo alternativo (non gulp-if) ..

+0

Così si vuole che se '--watch' è passato vuoi costruire + continuare a guardare e ricostruire se le fonti MENO cambiano? – jsalonen

+0

@jsalonen esattamente – knownasilya

+0

Mi piacerebbe ricevere l'input di @ robrich qui :) – knownasilya

risposta

6

gulp-watch è un flusso senza fine, così se chiamato non consentirà mai l'uscita del processo. Il tuo compito chiama sempre watch() per passarlo a gulpif anche se il if non ne ha bisogno. Ciò significa che eseguirai un osservatore non collegato. Inoltre, l'osservatore deve essere il primo nella catena di condotte in modo che possa riattivare i restanti gestori.

Quello che devi fare è usare l'argomento della riga di comando per chiamare e allegare condizionatamente watch(). eseguire un'attività che esegue la visione. Inoltre, utilizza gulp-plumber (https://github.com/floatdrop/gulp-plumber) per mantenere attivo lo stream se si verifica un errore dopo l'osservatore.

var plumber = require('gulp-plumber'); 
gulp.task('less', function() { 
    var src = gulp.src(['./client/styles/styles.less', './client/styles/libs.less']); 

    if (cli.watch) { // watch() won't be called without the command line arg 
     src = src.pipe(watch()).plumber(); 
    } 

    return src.pipe(less({ sourceMap: !cli.production })) 
     .pipe(gulp.dest('./dist/styles')); 
}); 
+2

Ho trovato un lavoro in giro, non esattamente come il tuo ma funziona altrettanto bene. Sto usando 'pipe (cli.watch? Watch(): gutil.noop())'. Grazie per questa soluzione. – knownasilya

+1

'lazypipe(). Pipe (guarda)' probabilmente funzionerebbe anche https://www.npmjs.org/package/lazypipe – mpen

0

Non è così elegante, ma questo di lavori basati su NODE_ENV (tirato con gulp-environments), che ho voluto per determinare inizio watch da (sì in fase di sviluppo, non in produzione/distribuzione). Disclaimer: io appena iniziato a utilizzare Gulp (4.0 beta in modo che gulp.series opere), quindi questo potrebbe essere terribile, ma ottiene il lavoro fatto .. :-)

 
var environments = require('gulp-environments'); 
var development = environments.development; 
var production = environments.production; 

if (development()) { 
    gulp.task('default', gulp.series('flow', 'babel', 'cleanup', 'watch'), function(done) { 
     done(); 
    }); 
} 
else { 
    gulp.task('default', gulp.series('flow', 'babel', 'compress', 'cleanup'), function(done) { 
     done(); 
    }); 
} 
Problemi correlati