grunt-war:动态定义选项

时间:2017-12-22 18:24:24

标签: javascript gruntjs

基本上我所拥有的是一个项目,通过运行grunt serve:local:1stgrunt serve:test:2nd来设置为不同的环境和目标组合。现在我需要为那些不同的环境/目标实际构建我正在使用grunt-war。

事情是,我需要不同的战争选项,具体取决于我的目标(例如,不同的war_namewebxml_display_name)。从我所看到的,grunt-war似乎没有参数...我知道我可以传递像--war_name=*name*这样的选项并用grunt.option('war_name')来接受它们,但是因为我已经过了构建任务的参数中的目标,是不是有一些方法可以用来在内部定义grunt-war的选项?它也可以避免传递许多参数,只要我为同一个目标构建,这些参数将始终相同。

1 个答案:

答案 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'
  ]);
});

我不确定这是否是最佳方式,但它似乎按预期工作。