如何在 gulp 4 中从另一个任务重复启动一个任务

How to repeatedly launch a task from another task in gulp 4

我最近升级到 gulp 4,我正在尝试解决我的导出过程中长期存在的问题。

简而言之,我的项目中有 3 个(或更多)独立文件夹。我所说的独立是指他们每个人都有 自己的 bundle.js 和 global.css 文件 。我在我的 gulp 文件中设置了一个 target 变量,用于创建 gulp 所需的所有路径 target.

在当前情况下,当我想要导出整个项目时,我需要手动更改 gulp 文件中的 target 变量,然后 运行 export任务。

我需要像下面这样工作的东西(因为 other_folders 数组可以改变)

/*----------  Exports current target  ----------*/
gulp.task('export', gulp.series(to_prod,'export_files', 'export_scripts_and_styles', 'export_fonts', 'export_core'));

/*----------  Exports all targets  ----------*/
gulp.task('export_all', function(done){
    var needs_exporting = other_folders.concat("website");

    needs_exporting.forEach(function(export_this){
        target = export_this;
        set_paths();

        // Here it needs to fire the generic export task
        gulp.series('export');
    });

    done();
});

问题是我似乎找不到在 forEach 循环中调用 gulp 任务的方法。有没有办法做到这一点,或者我需要解决方法吗?

调用 gulp.series('export') 不会立即启动 export 任务。它只是 returns 您必须调用才能启动 export 任务的函数。

然而,调用返回的函数也不会立即启动 export 任务。该函数是异步的。只是稍后 export 任务才真正开始。

为系列集合的每个元素运行异步函数的最简单方法是使用eachSeries() function that's provided by the async包:

var async = require('async');

gulp.task('export_all', function(done){
    var needs_exporting = other_folders.concat("website");

    async.eachSeries(needs_exporting, function(export_this, cb) {
        target = export_this;
        set_paths();

        gulp.series('export')(cb);
    }, done);
});