在config中使用Grunt任务变量

时间:2014-03-18 10:53:45

标签: gruntjs

我想在我的Grunt任务的配置中定义变量,这些变量正在被我的任务取代。

我的用例是我尝试根据包含多个站点配置的config.json创建单独的JS输出文件。

我的配置示例:

extractProjectConfigs: {
  options: {
    merge: '<%= yeoman.dist %>/extracted.js',
    configWrapper: 'window.config = {{ extractedConfig }};'
  },
  prod: {
    src: ['./config/*.json'],
    dest: '.tmp/scripts/{{ configKey }}/searchbox.js'
  }
}

在我的extractProjectConfigs任务中,我定义了变量configKeyextractedConfig,并且我希望两者的值都在我的配置中。

我怎样才能做到这一点?我已经尝试在我的配置定义(即<%= extractedConfig %><%= configKey %>)中包含Grunt模板,但由于Grunt模板在将变量传递给我的任务之前解析变量,它基本上意味着我的变量变成空字符串。

1 个答案:

答案 0 :(得分:1)

原来Grunt模板是正确的方法。 Grunt模板在将<%= %>传递给任务之前解析由extractProjectConfigs: { options: { merge: '<%= yeoman.dist %>/extracted.js', configWrapper: 'window.config = {{= extractedConfig }};' }, prod: { src: ['./config/*.json'], dest: '.tmp/scripts/{{= configKey }}/searchbox.js' } } 定义的变量。但是,Grunt模板还提供了一种确定自己的变量分隔符的方法,它允许您在任务运行后使用Grunt模板进行解析,这意味着我可以在配置中使用变量。

我最终使用了以下配置:

function parseTemplate(template, vars) {
  grunt.template.addDelimiters('double-brackets', '{{', '}}');

  return grunt.template.process(template, {
    data: vars,
    delimiters: 'double-brackets'
  });
}

在我的任务中,我使用以下自定义Grunt模板函数来解析配置:

var dest = parseTemplate(file.dest, {
  projectKey: 'foo'
});

然后可以在任务中使用此功能,例如:

grunt.file.write

然后可以在grunt.file.write(dest, 'write something to dest with projectKey replaced by foo');:{{1}}

中使用