Как повторно запустить задачу из другой задачи в 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);
});