我试图动态(在运行时)创建一组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)));
怎么了?
答案 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));