在运行时创建一组gulp任务

时间:2018-11-08 09:42:28

标签: javascript gulp

我试图动态(在运行时)创建一组gulp任务,然后再执行它们。

因此,默认任务以名为createTasks的串行任务执行,我认为这将在数组tasks中创建我的所有任务,然后执行gulp.series(tasks)返回的函数。

不幸的是,这会产生错误:

  

VM40 assert.js:42 Uncaught AssertionError:应该使用串行或并行方式组合一个或多个任务

代码如下:

// Gulp 4
var gulp = require('gulp');

var tasks = [];
const fileArray = ['task1', 'task2'];

debugger;
gulp.task('createTasks', function(done) {
for (var key in fileArray)
{
    gulp.task(fileArray[key], function(done) {
        console.log("I was called");
    });
    tasks.push(fileArray[key]);
}});


gulp.task('default', gulp.series('createTasks', gulp.series(tasks)));

怎么了?

2 个答案:

答案 0 :(得分:0)

gulp.series不是期望任务作为单独的参数,而不是将它们全部接收到单个数组参数中吗?

如果您的设置支持ES 6,则应该可以:

gulp.task('default', gulp.series('createTasks', gulp.series(...tasks)));

如果没有,您可以尝试以下方法:

gulp.task('default', gulp.series('createTasks', gulp.series.apply(this, tasks)))

答案 1 :(得分:0)

不需要createTasks作为任务。您只需遍历任务列表,然后将任务名称添加到数组中,然后以apply调用series方法即可。

// Gulp 4
var gulp = require('gulp');

var tasks = [];
const fileArray = ['task1', 'task2'];

for (var key in fileArray){
    gulp.task(fileArray[key], function(done) {
        console.log("I was called");
    });
    tasks.push(fileArray[key]);
};


gulp.task('default', gulp.series.apply(this,tasks));