2013-02-15 63 views
3

我想创建一些任务,我可以从不同的json文件读取自定义配置,并用json文件的内容替换我的coffee-source文件中的内容,并连接源文件。grunt任务与自定义json配置

我PROJEKT-设置:

  • ./src

    • file1.coffee
    • file2.coffee
  • ./config中

    • /folder1中

      • development.json(包含:{ “键”: “VALUE1”}
      • production.json(包含:{ “键”: “VALUE2”}
    • /文件夹2

      • development.json(包含:{ “键”: “值3”}
      • production.json(包含:{ “键”:“v alue4" }
  • ./dist

    • package-name.coffee
    • 包name.js

file1.coffee包含

myVar = '@@putkeyhere' 
version = '@@version' 
... 

我有繁重的concat任务运行本身的配置和工作:

concat: { 
    dist: { 
    src: ['<banner>', './src/*.coffee'], 
    dest: './dist/<%= pkg.name %>.coffee' 
    } 
}, 

我已经拿到了咕噜替换任务(更换版本等已经工作当我运行“咕噜替换”在已经连接起来的文件)

replace: { 
    dist: { 
    options: { 
     variables: { 
     'created': '<%= grunt.template.today("dd.mm.yyyy HH:MM:ss") %>', 
     'environment': 'dev', 
     'version': '<%= pkg.version %>' 
     }, 
     prefix: '@@' 
    }, 
    files: { 
     'dist/': ['./dist/<%= pkg.name %>.coffee'] 
    } 
    } 
}, 

终于咖啡编译任务:

coffee: { 
    compile: { 
    files: { 
     './dist/<%= pkg.name %>.js': ['./dist/*.coffee']   
    } 
    } 
} 

所有的任务都可以为自己工作,但是我需要从config-json文件中读取内容到连接的咖啡文件中,然后将所有文件编译为js。

我想这样的事情,但是,这并不觉得不对劲:

grunt.registerTask('mytask', '', function (env) { 

    env = env || 'development'; 
    if (env !== 'development' && env !== 'production') { 
    grunt.log.error("'" + env + "' is not valid environment"); 
    return false; 
    } 

    var c = grunt.option('c'); 
    if(c) { 

    // if i run the task "grunt mytask:production -c folder2 it should read 
    // ./config/folder2/development.json 
    // that works that way, but i dont think this is a good solution 
    var config = grunt.file.readJSON('./config/' + c + '/' + env + '.json') 


    } else { 

    // here i need to iterate for all folders in ./config, and do stuff for all 
    } 

}); 

是多任务的选项?但是如何从config.json文件动态读取?

感谢您的帮助!

回答