2014-06-11 20 views
5

基本上我想設置我的任務,這樣如果我做gulp less --watch它會看,否則就做構建。這是我到目前爲止有:使用gulp-if有條件地啓用gulp-if(或別的東西)

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

什麼情況是,它仍然執行watch,但沒有通過任何文件。這也防止了從任務ING process.exit() ..

我假設我必須要麼把它包在東西,或者使用另一種方法(未gulp-if)..

+0

所以,你想,如果'--watch'是通過你想建立+繼續觀看,並再次建立,如果LESS來源改變? – jsalonen

+0

@jsalonen正好 – knownasilya

+0

很想得到@ robrich的輸入:) – knownasilya

回答

6

gulp-watch是環形流,因此如果調用它永遠不會允許該進程退出。你的任務總是調用watch(),以便將它傳遞給gulpif,即使在不需要它的情況下也是如此。這意味着你將運行一個獨立的觀察者。此外,觀察者需要在管道鏈中處於第一位,以便重新觸發其餘的處理程序。

您需要做的是使用命令行參數來有條件地調用並附加watch()。運行一個觀看的任務。另外,如果觀察者之後有錯誤,則使用gulp-plumberhttps://github.com/floatdrop/gulp-plumber)保持流正常工作。

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

我發現了一個工作,不完全像你的工作,但它的工作原理。我正在使用'pipe(cli.watch?watch():gutil.noop())'。感謝這個解決方案。 – knownasilya

+1

'lazypipe()。pipe(watch)'也可能工作https://www.npmjs.org/package/lazypipe – mpen

0

不那麼優雅,但是這個作品基於NODE_ENV(與gulp-environments被拉),我想通過確定的watch開始(是在發展,不生產/部署)。免責聲明:我剛開始使用咕嘟咕嘟(4.0測試版,因此gulp.series作品),所以這可能是可怕的,但它能夠完成任務.. :-)

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