0

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

1 回答 1

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();
      })();
    };
  });
于 2019-06-03T14:12:55.313 回答