使用gulp-if(或其他东西)有条件地启用gulp-watch



基本上我想设置我的任务,这样如果我执行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() ..

我假设我必须将其包装在某些东西中,或者使用替代方法(不是gulp-if).

gulp-watch是一个无止尽的流,所以如果调用它将永远不允许进程退出。您的任务总是调用watch(),以便将其传递给gulpif,即使if不需要它。这意味着您将运行一个独立的监视器。此外,监视程序需要位于管道链的第一个,以便它可以重新触发剩余的处理程序。

您需要做的是使用命令行参数有条件地调用和附加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'));
});

不那么优雅,但这是基于NODE_ENV(与gulp-environments一起拉入)的,我想确定watch的开始(是在开发中,不是在生产/部署中)。免责声明:我刚刚开始使用Gulp(4.0测试版,以便gulp.series工作),所以这可能是可怕的,但它完成了工作。: -)

<>之前Var environments = require('gulp-environments');Var development = environments.development;Var生产=环境生产;If (development()) {饮而尽。任务("违约",饮而尽。Series ('flow', 'babel', 'cleanup', 'watch'), function(done) {(完成);});}其他{饮而尽。任务("违约",饮而尽。Series ('flow', 'babel', 'compress', 'cleanup'), function(done) {(完成);});}

相关内容

  • 没有找到相关文章

最新更新