Javascript Grunt任务目标阵列?
我可以将多个文件数组设置为一个目标:Javascript Grunt任务目标阵列?,javascript,arrays,gruntjs,build-process,Javascript,Arrays,Gruntjs,Build Process,我可以将多个文件数组设置为一个目标: task:{ target:{ files:[ { expand:true, cwd:'client/', dest:'server/', src:[ 'scripts/**/*.js', 'styles/
task:{
target:{
files:[
{
expand:true,
cwd:'client/',
dest:'server/',
src:[
'scripts/**/*.js',
'styles/**/*.css',
'images/**'
]
},
{
expand:true,
cwd:'client/assets/',
src:'**/*',
dest:'server/'
}
]
}
}
现在我想对一个目标做同样的事情
像这样:
task:{
server:[
{
options:{
…
},
files:{
…
}
},
{
options:{
…
},
files:{
…
}
}
]
}
但这不适用于Grunt:
Warning: Object #<Object> has no method 'indexOf' Use --force to continue.
警告:对象#没有使用“indexOf”方法--强制继续。
我怎么做
现在,我使用此方案执行相同的操作:
task:{
server_<subtask_one>:{
options:{
…
},
files:{
…
}
},
server_<subtask_second>:{
options:{
…
},
files:{
…
}
}
}
任务:{
服务器名称:{
选项:{
…
},
档案:{
…
}
},
服务器名称:{
选项:{
…
},
档案:{
…
}
}
}
但对每个子任务重复任务前缀,然后将它们放在单独的行中,这样做并不方便:
'dataSeparator:<target>_<subtask_one>',
'dataSeparator:<target>_<subtask_second>',
'dataSeparator:\ux',
“DataSepator:389;”,
除非您想编写自定义任务,否则这是您唯一的选择。但大多数任务都允许您在任务级别指定选项
块,因此您至少可以节省一些重复:
task:{
options:{
// options common to all tasks
},
server_<subtask_one>:{
options:{
// override options if necessary
},
files:{
// custom for this target
}
},
server_<subtask_second>:{
options:{
// override options if necessary
},
files:{
// custom for this target
}
}
}
任务:{
选项:{
//所有任务的通用选项
},
服务器名称:{
选项:{
//如有必要,覆盖选项
},
档案:{
//此目标的自定义
}
},
服务器名称:{
选项:{
//如有必要,覆盖选项
},
档案:{
//此目标的自定义
}
}
}
正如我所说,您可能可以编写一个自定义任务来动态重置每个目标,但这是混乱的,我不建议这样做。。。甚至不确定它是否能正常工作
grunt.registerTask('mutli-task', 'Compile options and pass to task', function() {
grunt.config.set('task.server_<subtask_one>.some_setting', 'value');
// ...
grunt.task.run('task');
// Now do it again, but with different settings... maybe in a loop?
});
grunt.registerTask('mutli-task','Compile options and pass to task',function(){
grunt.config.set('task.server_u.some_setting','value');
// ...
grunt.task.run('task');
//现在再做一次,但是用不同的设置…可能在一个循环中?
});