我正在使用 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