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

Coffeescript 在Grunt中为不同的目标编写相同的配置,coffeescript,handlebars.js,gruntjs,Coffeescript,Handlebars.js,Gruntjs,我有一个任务,在我的GrunFile上有不同的目标,所有目标都包含完全相同的字段,只更改名称。是否可以通过编程方式创建这些目标,只传递目标列表 我的目标是创建一个已安装子模块的列表,并为每个子模块创建一个具有目标的任务。具体来说,任务不是我的,我正在尝试为coffee任务创建目标以编译一些文件,但稍后我还需要对Handlebar模板执行相同的操作 我尝试过创建一个通用目标并按如下方式传递子模块名称: grunt.initConfig( task: { target: {

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

我的目标是创建一个已安装子模块的列表,并为每个子模块创建一个具有目标的任务。具体来说,任务不是我的,我正在尝试为coffee任务创建目标以编译一些文件,但稍后我还需要对Handlebar模板执行相同的操作

我尝试过创建一个通用目标并按如下方式传递子模块名称:

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"
            }
       }
    }
})
grunt.initConfig(
任务:{
目标:{
是的,
扁平化:是的,
cwd:“#”,
src:[“”],
目的地:“,
重命名:函数(dest,src){
返回dest+“.js”
}
}
}
})
然后用task:target:targetname注册一个任务数组,但它抱怨args未定义


有什么好办法吗

当然,它只是简单的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'])
});

谢谢!但它仍然不起作用。当从initConfig调用config时,它会说“undefined不是一个函数”。我尝试在调用initConfig之前和之后定义函数(但在外部),没有luckCheck out示例fiddle。您可能已经有了一个配置变量,我将其重命名为
multi
,这样您就不会在我的代码中得到名称clashing。我将函数命名为coffeeConfig,但它不起作用。我找到了一个解决方法,创建一个包含所有属性的Javascript对象,并在设置完所有内容(包括函数调用)后,使用该对象调用initConfig。我可以改变你的密码作为答案吗?