Я строю конвейер генерации электронной почты (несколько шаблонов), используя файлы перевода nunjucks и json. Это означает, что мне нужно перебрать несколько шаблонов и файлов перевода, однако я не могу заставить его работать.
Попытка добавить еще один цикл в templates.map (), но это, похоже, не работает (или я делаю это совершенно неправильно, конечно). Это почти работает, но в какой-то момент происходит сбой, генерируя только несколько шаблонов. Первый шаблон работает, но он падает на втором шаблоне:
The following tasks did not complete: <anonymous>
Did you forget to signal async completion?
источник: https://cobwwweb.com/dynamic-tasks-gulp-4
var templates = [];
var languages = ["nl", "en"];
function generateTemplates(done) {
const tasks = templates.map((template) => {
return () => {
const langs = languages.map((lang) => {
return () =>
gulp.src(`source/templates/${template}`)
.pipe(data(function () {
return require(`./source/translations/${lang}/${template.split('.')[0] }.json`);
}))
.pipe(nunjucksRender({
path: ['source/partials']
}))
.pipe(gulp.dest('dist/' + lang));
});
return gulp.series(...langs, (seriesDone) => {
seriesDone();
})();
}
});
return gulp.series(...tasks, (seriesDone) => {
seriesDone();
done();
})();
}
Я также попытался сгенерировать задачи, используя 2 цикла for, но при этом генерируется только последний шаблон массива из последнего языка в массиве (пример: только en / template2 будет сгенерирован правильно). Я вижу в консоли, что задачи начинаются и заканчиваются, но я их нигде не вижу. Может быть, цикл завершен гораздо быстрее, чем генерация задач? :
var templates = fs.readdirSync('./source/templates');
var languages = ["nl", "en"];
for (var lang of languages) {
for (var template of templates) {
gulp.task(`${lang}-${template}`, function (done) {
return gulp.src(`source/templates/${template}`)
.pipe(data(function () {
return require(`./source/translations/${lang}/${template.split('.')[0]}.json`);
}))
.pipe(nunjucksRender({
path: ['source/partials']
}))
.pipe(gulp.dest(`dist/${lang}`));
});
tasks.push(`${lang}-${template}`);
}
}
gulp.task('genlang', gulp.series(tasks));
Структура моей папки:
/dist
/source
--/partials
--/templates
--/template1.html
--/template2.html
--/translations
--/en
--/template1.json
--/template2.json
--/nl
--/template1.json
--/template2.json