我正在使用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
答案 0 :(得分:0)
我自己解决了这个问题,我需要在退货单中做一些cb的操作:
function generateTemplates(done) {
const tasks = templates.map((template) => {
return (doneTasks) => {
const langs = languages.map((lang) => {
return (doneLanguages) => {
gulp.src(`source/templates/${template}`)
.pipe(data(() => require(`./source/translations/${lang}/${template.split('.')[0]}.json`)))
.pipe(nunjucksRender({
path: ['source/partials']
}))
.pipe(gulp.dest('./dist/' + lang));
doneLanguages();
}
});
return gulp.parallel(...langs, (seriesDone) => {
seriesDone();
doneTasks();
})();
};
});