gulp.paralell()或gulp.series()中的条件gulp任务

时间:2018-06-29 03:02:51

标签: gulp gulp-if

有关管道内部条件任务的信息过多(例如“ gulp-if”插件)。但是,实际上它不是“条件任务”:它是“条件插件用法”,并且一个任务可以使用多个插件。以下是有条件地在管道内(例如,在gulp.paralell()内)运行任务的方法

假设任务名称可以包含用于提供易于理解的任务含义的空格。

gulp.task('Build', gulp.paralell(
    'Preprocess HTML',
    'Prepeocess styles',
    done => {
        if(checkSomeCondition()){
            runTask('some Task') // but how?
        }
        else {
            done();
        }
    }
))

3 个答案:

答案 0 :(得分:1)

gulp4.0的优点在于您的任务只能是函数,因此可以进行以下工作:

gulp.task('Preprocess HTML', function () {
  console.log("in Preprocess HTML");
  return gulp.src('./');
});
  

您可以使用以上版本(“旧方法”)或更新版本   在下面。

     

我在这里展示了两个同时使用这两个版本的任务,但我个人不会将它们混在一起。

// function PreprocessHTML() {
//   console.log("in Preprocess HTML");
//   return gulp.src('./');
// }

function PreprocessStyles() {
  console.log("in Preprocess styles");
  return gulp.src('./');
}

function testTaskTrue() {
  console.log("in testTaskTrue");
  return gulp.src('./');
}

function testTaskFalse() {
  console.log("in testTaskFalse");
  return gulp.src('./');
}

function checkSomeCondition() {
  console.log("in checkSomeCondition");
  return false;
}

//    Again, I definitely wouldn't mix the two versions of tasks as shown below.
//    Just here for demonstration purposes.

gulp.task('test', gulp.parallel( 'Preprocess HTML',  PreprocessStyles,
  done => {
    if (checkSomeCondition()) {

        // so testTaskTrue can be any gulp4.0 task, easy to call since it just a function

      testTaskTrue();
    }
    else {
      testTaskFalse();
    }
    done();
  }
));

答案 1 :(得分:1)

对于gulp 4,首先创建此辅助函数:

function gulpTaskIf(condition, task) {
  task = gulp.series(task) // make sure we have a function that takes callback as first argument
  return function (cb) {
    if (condition()) {
      task(cb)
    } else {
      cb()
    }
  }
}
  • 作为第一个参数,此帮助器采用函数形式的条件。条件函数在开始执行任务时运行,因此您可以检查条件函数中先前步骤的输出。
  • 第二个参数指定要运行的任务,并且可以与gulp.parallel()gulp.series()接受的参数相同,即字符串,函数引用或来自另一个{{1}的返回值}或gulp.parallel()
  • 返回一个函数,该函数可以作为第二个参数或作为gulp.series()gulp.task()调用的参数传递给gulp.parallel()

示例(第一个匹配问题):

    嵌入在gulp.parallel()或gulp.series(),按名称调用任务
gulp.series()
  • 作为任务,按名称调用任务
gulp.task('Build', gulp.parallel(
    'Preprocess HTML',
    'Prepeocess styles',
    runTaskIf(checkSomeCondition, 'some Task')
))
  • 作为独立任务,按功能引用调用任务
function myTask() {
  return gulp.src(...)
    ...
    .dest(...)
}
gulp.task('my-task', myTask)
gulp.task('default', gulpTaskIf(
  function () {
    return Math.random() < 0.5; // example condition
  },
  'my-task')
  • 作为独立任务,调用gulp.parallel()或gulp.series()参考
function myTask() {
  return gulp.src(...)
    ...
    .dest(...)
}
gulp.task('default', gulpTaskIf(() => Math.random() < 0.5, myTask)

答案 2 :(得分:0)

我有一个插件数组,我在其中执行简单的 If 查询,然后展开数组,请参阅第 199 行 here

基于 Gulp 4。

对于构建过程,我将 Const 更改为 Let 并使用 If 进行查询,您可以看到 here