grunt-war:动态定义选项

grunt-war: dynamically define options

基本上我所拥有的是一个项目,该项目由运行设置为服务于不同的环境和目标组合,例如grunt serve:local:1stgrunt serve:test:2nd;现在我需要为这些差异进行实际构建 environments/targets 我正在使用 grunt-war.

事实是,根据我的目标,我需要不同的 war 选项(例如,不同的 war_namewebxml_display_name)。据我所见,grunt-war 似乎不接受争论...我知道我可以传递像 --war_name=*name* 这样的选项并用 grunt.option('war_name') 来选择它们,但是因为我我已经在构建任务的参数中传递了目标,难道没有某种方法可以使用它来在内部定义 grunt-war 的选项吗?它还可以避免必须传递许多参数,只要我为同一目标构建,这些参数将始终相同。

不确定我是否应该说我找到了解决方法或绕过它的方法,但这是我最终所做的并且它奏效了:

grunt.initConfig 之前用我想动态定义的选项和一些默认值定义了一个变量:

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

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