使用Grunt.js动态构建流程

时间:2012-12-12 04:29:57

标签: javascript build automation gruntjs

是否可以读取与每个主题相关的子主题和变量的JSON文件,并通过grunt.js动态生成构建过程?

具体来说,我有一个标准grunt.initConfig(),对于外部themes.json文件中的每个JSON对象,我想重复主grunt.initConfig()的整个构建过程,但我需要通过通过与每个子主题相关联的元到构建过程的变量(并不总是相同)。

我花了很多时间来完成它,我开始认为grunt.js无法适应我正在寻找的构建过程。我认为通过在像这样的自定义元值中创建镜像层次结构

module.exports = function(grunt) {
  grunt.initConfig({
    pkg: '<json:package.json>',
    _themes: '<json:themes.json>',
    recess : 'foo',
    concat : 'bar',
    mincss : 'baz
}

然后在themes.json内部再次镜像该结构,但是像这样调用root配置文件

   {
   "themFoo" : {
      "_meta_val_1" : "x",
      "_meta_val_2" : "y",
      "_meta_val_3" : "z",
      "recess" : "<%= recess %>",
      "concat" : "<%= concat %>",
      "mincss" : "<%= min %>"
    }

我可以获得默认配置,只需用模板变量填充空白,但它似乎不会那样工作。

1 个答案:

答案 0 :(得分:2)

Grunt.js的作者Ben Alman很乐意在这里为那些想要做我上面概述的人解释:

https://github.com/gruntjs/grunt/issues/568#issuecomment-11335941

基本上,我错误地解决了这个问题,没有意识到JSON结构在顶层是不可协商的。您可以在顶层函数下嵌套可选和/或多个文件,输出等,但这些顶级JSON数据项保留用于本机函数和扩展。

以下是我如何完成上述内容的要点: https://gist.github.com/4294776