在Grunt中为不同的目标编写相同的配置

时间:2013-12-16 12:35:25

标签: coffeescript handlebars.js gruntjs

我的Gruntfile上有一个不同目标的任务,所有目标都包含完全相同的字段,只更改名称。是否可以通过编程方式创建这些目标,只传递目标列表?

我的目标是创建一个已安装的子模块列表,并为每个子模块创建一个包含目标的任务。具体来说,任务不是我的,我正在尝试为咖啡任务创建目标来编译一些文件,但我也需要在以后使用把手模板做同样的事情。

我尝试过创建一个通用目标并传递子模块名称,如下所示:

grunt.initConfig(
    task: {
        target: {
            expand: true,
            flatten: true,
            cwd: "<%= AppModulesPaths[grunt.task.current.args[0]] %>" #"<%= frontend_src %>",
            src: ["<%= AppModulesSources[grunt.task.current.args[0]]%>"],
            dest: "<%= frontend_tmp %>",
            rename: function(dest, src){
                return dest + "<%= grunt.task.current.args[0] %>.js"
            }
       }
    }
})

然后使用task:target:targetname注册一个任务数组,但它抱怨args未定义。

这样做有好办法吗?

1 个答案:

答案 0 :(得分:1)

当然,它只是简单的JavaScript。

function config (targets) {
  var result = {};

  targets.forEach(function (target) {
    result[target] = {
      // target configuration here, 
      // optionally tailored to the target's name
    };
  });

  return result;
}

然后,只需使用它

grunt.initConfig({
  task: config(['target', 'target2', 'target3', 'targetN'])
});

See fiddle