2014-06-11 6 views
5

Grundsätzlich möchte ich meine Aufgabe so einrichten, dass wenn ich mache gulp less --watch wird es sehen, sonst nur den Build. Das ist, was ich habe, so weit:gulp-watch bedingt mit gulp-if (oder etwas anderes) aktivieren

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

Was passiert, ist, dass es immer noch die watch ausführt, aber nicht passieren alle Dateien. Dies verhindert auch die Aufgabe von process.exit() ing ..

Ich gehe davon aus ich muss es entweder in etwas wickeln, oder eine alternative Methode verwenden (nicht gulp-if) ..

+0

Damit Sie wollen, wenn '--watch' ist du willst weiterbauen + weiterschauen und nochmal bauen wenn sich LESS Quellen ändern? – jsalonen

+0

@jsalonen genau – knownasilya

+0

Würde gerne @ robrichs Eingang hier bekommen :) – knownasilya

Antwort

6

gulp-watch ist ein endloser Strom, so Wenn sie aufgerufen wird, wird der Prozess nie beendet. Deine Aufgabe rufe immer watch() an, um sie an gulpif zu übergeben, auch wenn die if sie nicht braucht. Das bedeutet, dass Sie einen unbeaufsichtigten Beobachter ausführen. Darüber hinaus muss der Watcher in Ihrer Pipe-Kette an erster Stelle stehen, damit die verbleibenden Handler erneut ausgelöst werden können.

Mit dem Befehlszeilenargument müssen Sie watch() aufrufen und anhängen. Führe eine Aufgabe aus, die das Beobachten erledigt. Verwenden Sie auch gulp-plumber (https://github.com/floatdrop/gulp-plumber), damit der Stream funktioniert, wenn nach dem Watcher ein Fehler auftritt.

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

Ich fand eine Arbeit herum, nicht genau wie deins, aber es funktioniert auch. Ich benutze 'pipe (cli.watch? Watch(): gutil.noop())'. Danke für diese Lösung. – knownasilya

+1

'Lazypipe(). Pipe (Watch)' würde wahrscheinlich auch funktionieren https://www.npmjs.org/package/lazypipe – mpen

0

Nicht so elegant, aber dies auf NODE_ENV basierte Arbeiten (zog mit gulp-environments), die ich Anfang watch durch (ja in der Entwicklung, nicht in der Produktion/deployment) bestimmen wollte. Haftungsausschluss: Ich habe gerade angefangen Gulp (4.0 beta, so dass gulp.series Werke) verwendet wird, so dass diese schrecklich sein könnte, aber es wird die Arbeit getan .. :-)

 
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(); 
    }); 
} 
Verwandte Themen