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是一个无穷无尽的流,所以如果调用它,它永远不会允许进程退出。您的任务总是调用watch()以便将其传递给gulpif即使 if 不需要它。这意味着您将运行一个独立的观察者。此外,观察者需要在您的管道链中排在第一位,以便它可以重新触发剩余的处理程序。

您需要做的是使用命令行参数有条件地调用和附加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'));
});
于 2014-06-13T13:12:53.900 回答
0

不是那么优雅,但这基于NODE_ENV(使用gulp-environments引入)我想确定开始watch于(在开发中是,在生产/部署中不是)。免责声明:我刚开始使用 Gulp(4.0 beta 以便gulp.series工作),所以这可能很糟糕,但它可以完成工作.. :-)

var environment = require('gulp-environments');
变种发展=环境。发展;
变种生产=环境。生产;

如果(发展()){
    gulp.task('default', gulp.series('flow', 'babel', 'cleanup', 'watch'), function(done) {
        完毕();
    });
}
别的 {
    gulp.task('default', gulp.series('flow', 'babel', 'compress', 'cleanup'), function(done) {
        完毕();
    });
}
于 2015-10-25T22:05:12.943 回答