首页 > 解决方案 > 如何从字符串数组构造 gulp.parallel()?

问题描述

如何gulp.parallel()使用字符串数组构造?

我希望能够动态创建函数并将它们导出为 gulp 任务。这些函数的名称存储在一个名为 的数组ts中。我希望能够创建一个gulp.parallel调用所有动态函数的函数?

如何gulp.parallel()使用字符串数组构造?

我尝试了以下方法,但没有成功。

// This will call the "mainTask" first, then call all the dynamic tasks
exports.allTasks = series(mainTask, () => gulp.parallel(ts));

我也试过

function all(cb) {
    var ts = ['task1', 'task2','task3']; // This array is generated dynamicly so I don't know the task* names until runtime.

    return gulp.parallel(...ts, (seriesDone) => {
        seriesDone();
        cb();
    });
}

exports.allTasks = series(mainTask, all);

但是all不会调用ts数组中列出的方法。

我知道我应该能够调用gulp.parallel('task1','task2','task3');但不确定如何使用数组进行这样的调用。

标签: javascriptgulp

解决方案


这对我有用:

const gulp = require('gulp');

function task1(cb) {
  console.log("in task1");
  cb();
};

function task2(cb) {
  console.log("in task2");
  cb();
};

function task3(cb) {
  console.log("in task3");
  cb();
};

function mainTask(cb) {
  console.log("in mainTask");
  cb();
}

const ts = [];
ts.push(task1, task2, task3);  // or in the all function as you had it
                               // not pushing strings, but function references

function all(cb) {

  // var ts = [task1, task2, task3]; // function names aren't strings in gulp.parallel

  gulp.parallel(...ts, (seriesDone) => {

    seriesDone();
    // cb();
  })();  // () needs to be here to work

  cb();
}

exports.allTasks = gulp.series(mainTask, all);

输出:

[20:54:07] Using gulpfile ~\OneDrive\Test Bed\taskArray\gulpfile.js
[20:54:07] Starting 'allTasks'...
[20:54:07] Starting 'mainTask'...
in mainTask
[20:54:07] Finished 'mainTask' after 3.44 ms
[20:54:07] Starting 'all'...
[20:54:07] Starting 'task1'...
[20:54:07] Starting 'task2'...
[20:54:07] Starting 'task3'...
[20:54:07] Starting '<anonymous>'...
[20:54:07] Finished 'all' after 4.23 ms
[20:54:07] Finished 'allTasks' after 15 ms
in task1
[20:54:07] Finished 'task1' after 17 ms
in task2
[20:54:07] Finished 'task2' after 19 ms
in task3
[20:54:07] Finished 'task3' after 30 ms
[20:54:07] Finished '<anonymous>' after 31 ms

推荐阅读