5

基本的に、タスクをセットアップして、実行する場合gulp less --watchは監視し、それ以外の場合はビルドを実行するようにします。これは私がこれまでに持っているものです:

'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ますが、ファイルは渡されません。これにより、タスクがprocess.exit()ing..

私はそれを何かでラップするか、別の方法を使用する必要があると仮定していgulp-ifます..

4

2 に答える 2

6

gulp-watchはエンドレス ストリームであるため、呼び出された場合、プロセスが終了することはありません。あなたのタスクは、ifがそれを必要としない場合でも、watch()それを渡すために常に呼び出します。gulpifこれは、接続されていないウォッチャーを実行することを意味します。さらに、残りのハンドラーを再トリガーできるように、ウォッチャーはパイプ チェーンの最初にある必要があります。

あなたがする必要があるのは、コマンドライン引数を使用して、条件付きで呼び出してアタッチすることwatch()です。監視を行うタスクを実行します。また、gulp-plumber( https://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'));
});
于 2014-06-13T13:12:53.900 に答える