javascript - 如何访问 initConfig 中设置的 grunt 任务的回调

标签 javascript callback gruntjs

我遇到了一个似乎无法解决的问题。我尝试了几种不同的方法,但还没有任何效果。

我正在使用 grunt-messageformat 来创建我的 i18n 本地化副本。我有 2 个包含语言的文件夹,我希望 grunt 自动为每个文件夹(语言)生成正确的输出。

最接近我的任务是:

grunt.registerTask("ReadFolders", "Read the language folders in app/data/i18n/", function () {
  // Returns an array of the paths to the language folders.
  // ['app/data/i18n/en', 'app/data/i18n/key', ...]
  var languageFolders = grunt.file.expand("app/data/i18n/*");
  var path;
  var languageName;
  var i;

  for (i = 0; i < languageFolders.length; i++) {
    path = languageFolders[i];
    languageName = path.substring(path.lastIndexOf("/") + 1, path.length);

    grunt.config.set("mFormat.locale", languageName);
    grunt.config.set("mFormat.inputdir", "app/data/i18n/" + languageName);
    grunt.config.set("mFormat.output", "app-dist/test/js/locales/" + languageName + "/i18n.js");

    grunt.task.run("messageformat:all");
  }
});

这还为我的消息格式任务使用了以下代码,该任务是在 initConfig 中设置的:

messageformat: {
  all: {
    locale: "<%= mFormat.locale %>",
    inputdir: "<%= mFormat.inputdir%>",
    output: "<%= mFormat.output%>"
  }
}

问题是“readFolders”中的循环在 messageFormat 任务运行之前运行了两次,这意味着该任务运行了两次,但两次都使用 mFormat 变量的最后一个值。

我没有看到任何有关如何访问使用 initConfig 设置的任务回调的示例。

有什么想法吗?或者其他想法?

谢谢

最佳答案

好吧,我没有找到一种方法来完成我最初要求的事情...但我找到了一个很好的解决方法来满足我的需求。我没有为每个文件夹运行任务,而是为每种语言动态重写消息格式配置。

grunt.registerTask("ReadFolders", "Read the language folders in app/data/i18n/", function () {
  // Returns an array of the paths to the language folders.
  // ['app/data/i18n/en', 'app/data/i18n/key', ...]
  var languageFolders = grunt.file.expand("app/data/i18n/*");
  var path;
  var languageName;
  var locale;
  var messageFormat = {};
  var i = 0;

  for (i = 0; i < languageFolders.length; i++) {
    path = languageFolders[i];
    languageName = path.substring(path.lastIndexOf("/") + 1, path.length);

    locale = languageName;
    if (languageName === "key") {locale = "en"; }

    messageFormat[languageName] = {
      locale: locale,
      inputdir: "app/data/i18n/" + languageName,
      output: "app-dist/test/js/locales/" + languageName + "/i18n.js"
    };

  }

  grunt.config.set("messageformat", messageFormat);

  grunt.task.run("messageformat");
});

经过相当详尽的搜索后,我认为这是唯一可能的(坦率地说,就我而言,这是更好的)解决方案。

如果有人有任何其他想法,我们仍然很高兴听到任何其他想法。

关于javascript - 如何访问 initConfig 中设置的 grunt 任务的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18879390/

相关文章:

javascript - 获取忽略空格的javascript字符串中的最后一个字符

javascript - Jquery 覆盖不显示

javascript - 从 JSON 字符串值中删除双引号

javascript - 使用 Promise.all 等待所有回调完成

javascript - 使用 babel 和 browserify 进行 Grunt

node.js - Grunt Connect 需要 .html 扩展名

javascript - 两种不同的 API 调用——计算汇率

javascript - 如何一次显示所有回调结果(格式化)

javascript - 在 Promises 中使用循环的正确方法

javascript - 将 Grunt 与 VueJS 结合使用