javascript - 使用 gulp-if(或其他方式)有条件地启用 gulp-watch

标签 javascript build gulp gulp-watch gulp-less

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

最佳答案

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

关于javascript - 使用 gulp-if(或其他方式)有条件地启用 gulp-watch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24170445/

相关文章:

javascript - 如何在移动设备上禁用scrollify.js

javascript - 如何将新创建的ID放入LocalStorage?

asp.net-mvc - 如何将 TypeScript 构建为独立于 MVC 项目并依赖于 MVC 项目的项目,并将生成的 JavaScript 复制到 MVC 项目中?

linux - Centos6 上的构建问题

javascript - 从 server.js 中删除 browsersync 以进行 gulp

javascript - gulp.dest 与 glob gulp.src - 使其相对

javascript - Firefox/IE IIS 6 不支持在 Javascript/HTML 中隐藏标签

javascript - 使用流创建插件 gulp

android - 构建特定的 Android 平台?

javascript - 如何在html中使用两个组件