在grunt.js文件中,嵌套对象字面量是什么意思?

8

我在理解grunt.js文件中的嵌套时遇到了困难。在以下示例中,像concat.distmin.dist这样的嵌套对象是什么意思?dist关键字是否引用了另一个命名任务或仅仅是一个配置对象?执行concatmin任务时确切调用了什么?

module.exports = function (grunt) {
  grunt.initConfig({
    // …
    concat: {
      dist: {
        src: ["<banner:meta.banner>", "<file_strip_banner:lib/main.js>"],
        dest: "dist/main.js",
      }
    },
    min: {
      dist: {
        src: ["<banner:meta.banner>", "<config:concat.dist.dest>"],
        dest: "dist/main.min.js",
      }
    },
    // …
  });

  // …
  grunt.registerTask("default", "lint qunit concat min");
};
2个回答

10

在grunt中,支持这种嵌套的任务被称为多目标(multi tasks),而嵌套对象被称为目标(targets)。假设您有以下多目标:

 concat: {
    dist: {
       src: ["<banner:meta.banner>", "<file_strip_banner:lib/main.js>"],
       dest: "dist/main.js",
    },
    dev: {
       (...)
    }
 }

这意味着您在多任务concat中有目标distdev。您可以通过在控制台上键入任务名称来运行任何多任务的所有目标。例如:

grunt concat

将运行concat和dev。另一方面,您还可以明确指定要运行的目标:

grunt concat:dist  

只有执行dist目标。

据我所知,如果你有两个多任务具有相同名称的目标(例如您的示例min.distconcat.dist),这并不意味着两个dist引用相同的内容,它们只是恰好共享相同的名称。


我相信你所说的“targets”在gruntjs中被称为子任务。这里有一个使用distdev作为示例子任务的多任务。 - jonschlinkert
在 Grunt 的 Github 文档中,他们使用了“目标”这个术语:“您可以通过指定任务的名称来运行任何多任务的所有目标。在这种情况下,运行 grunt lint 将自动运行所有目标...” - alemangui
有趣的是,看起来“target”是官方文档中所记录的内容,但在描述和示例中,“subtask”也经常被使用,特别是在任务存储库中(SO删除了我提供的链接)。您是否知道这两个术语之间是否有区别?或者“subtask”是描述目标的“旧术语”?现在只是好奇,特别是考虑到新的grunt用户可能会感到困惑。 - jonschlinkert
Grunt正式采用术语"target"。 一些扩展使用术语"subtask",但意思是相同的。 我认为我甚至看到一个项目将它们简单地称为"multi-task sub-properties"。 我会说应该使用"target",但同时了解其他术语也很好。 - alemangui
"grunt concat将运行concat和dev"应该改为"[...]将运行_dist_和dev",也许你可以编辑一下@alemangui(因为我的编辑没有被接受)。谢谢!" - benebun

0

就像答案所说的那样,那些或“多目标”.. 我做了一个关于多任务的视频这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接