基本上我所拥有的是一个项目,通过运行grunt serve:local:1st
或grunt serve:test:2nd
来设置为不同的环境和目标组合。现在我需要为那些不同的环境/目标实际构建我正在使用grunt-war。
事情是,我需要不同的战争选项,具体取决于我的目标(例如,不同的war_name
和webxml_display_name
)。从我所看到的,grunt-war似乎没有参数...我知道我可以传递像--war_name=*name*
这样的选项并用grunt.option('war_name')
来接受它们,但是因为我已经过了构建任务的参数中的目标,是不是有一些方法可以用来在内部定义grunt-war的选项?它也可以避免传递许多参数,只要我为同一个目标构建,这些参数将始终相同。
答案 0 :(得分:0)
不确定我是否应该说我找到了这样做的方法或解决方法,但这就是我最终做的事情并且有效:
使用我想要动态定义的选项和一些默认值在grunt.initConfig
之前定义var:
var globalConfig = {
war_name:'name',
webxml_display_name:'display_name'
};
在grunt.initConfig
内定义它以使其可用于任务:
grunt.initConfig({
globalConfig: globalConfig,
...
参数化grunt-war
配置:
war: {
target: {
options: {
war_dist_folder: './dist',
war_verbose: true,
war_name: '<%= globalConfig.war_name %>',
webxml_welcome: 'index.html',
webxml_display_name: '<%= globalConfig.webxml_display_name %>'
},
...
}
}
定义了设置参数的任务:
grunt.registerTask('war-config', function(target){
if(target==='1st'){
globalConfig.war_name='name_1st';
globalConfig.webxml_display_name='display_name_1st';
}else if(target==='2nd'){
...
}else ...
});
最后在调用build
之前调用grunt-war
任务中的任务:
grunt.registerTask('build', function(environment, target) {
grunt.task.run([
'clean:dist',
...
'war-config:'+target,
'war'
]);
});
我不确定这是否是最佳方式,但它似乎按预期工作。