Как повторно запустить задачу из другой задачи в gulp 4

Я недавно перешел на gulp 4 и пытаюсь решить давнюю проблему с моим процессом экспорта.

Короче говоря, у меня есть 3 (или более) независимых папки в моем проекте. Под независимостью я подразумеваю, что у каждого из них есть свой собственный файл bundle.js и global.css. Я настроил target переменная в моем gulpfile, который используется для создания всех путей Gulp потребностей для этого target,

В текущей ситуации, когда я хочу экспортировать весь свой проект, мне нужно вручную изменить target переменная в gulpfile, а затем запустите 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 петля. Есть ли способ сделать это или мне нужен обходной путь?

1 ответ

Решение

Призвание gulp.series('export') не сразу начать export задача. Он просто возвращает функцию, которую вы должны вызвать, чтобы запустить export задача.

Однако вызов возвращенной функции не запускает export Задача сразу же. Функция асинхронная. Только позже export задача фактически началась.

Самый простой способ запустить асинхронную функцию для каждого элемента в серии - это использовать eachSeries() функция, которая обеспечивается 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);
});
Другие вопросы по тегам