2014-06-11 23 views
5

Temel olarak, görevimi kurmak istiyorum, böylece gulp less --watch izlerse, izleyeceğim.Gulp-watch koşullu olarak gulp-if (veya başka bir şeyle) koşullu olarak etkinleştirme

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

ne olur yine watch çalıştırır yani, ancak herhangi bir dosya geçemezse: Bu defa ne var. Bu aynı zamanda ben bir şey alanına kaydırmak veya alternatif bir yöntem (değil gulp-if) kullanmak için her zorunda tahmin ediyorum

.. process.exit() ing den görevi engeller ..

+0

Yani istediğiniz :-) .. Ben sadece, bu nedenle bu korkunç olabilir Gulp (gulp.series eser böylece 4,0 beta) kullanmaya başladı ama bu iş bitmiş olur '--watch' olması durumunda LESS kaynakları değiştiğinde + oluşturmak için devam etmek ve tekrar devam etmek ister misiniz? – jsalonen

+0

@jsalonen tam olarak – knownasilya

+0

@ robrich'in girişini burada almak isterim :) – knownasilya

cevap

6

gulp-watch yüzden sonsuz akışıdır olarak adlandırılırsa işlemin çıkmasına asla izin vermez. İhtiyacın olmadığı zaman bile, göreviniz her zaman gulpif'a iletmek için watch()'u arar. Bu, bağımsız bir gözlemciyi çalıştırıyor olacağınız anlamına gelir. Ek olarak, izleyicinin boru zincirinizde ilk olması gerekir, böylece kalan işleyicileri yeniden tetikleyebilir.

Yapmanız gereken şey, koşullu olarak watch()'u arayarak iliştirmek için komut satırı bağımsız değişkenini kullanmaktır. izlemek yapan bir görev çalıştırın. Ayrıca, izleyiciden sonra bir hata oluştuğunda akış çalışmasını sağlamak için gulp-plumber (https://github.com/floatdrop/gulp-plumber) kullanın.

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

Ben de sizinki gibi değil, aynı zamanda bir iş buldum. Ben boru (cli.watch? Watch(): gutil.noop()) 'kullanıyorum. Bu çözüm için teşekkürler. – knownasilya

+1

lazypipe() boru (izle) 'muhtemelen muhtemelen https://www.npmjs.org/package/lazypipe – mpen

0

çok zarif değil, ama bu NODE_ENV dayalı çalışır (evet gelişiminde, hiçbir üretim/dağıtım cinsinden) Ben tarafından watch başlangıcını belirlemek istedik hangi (gulp-environments ile çekilmiştir). Yasal Uyarı:

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