2013-08-21 30 views
1

我是gruntjs的新手,並且正在嘗試爲JS前端編寫構建。設定如下需求,使得進入構建過程(串聯,縮小)的所有源文件必須在外部文件中定義:在外部文件中定義構建源列表

|-config 
    |- js.json 
|-src 
    |- js 
    |- a.js 
    |- b.js 
|- Gruntfile.js 
|- package.json 

我簡化了項目結構來說明問題。該config/js.json看起來是這樣的:

[ 
    "<%=js_dir%>/a.js", 
    "<%=js_dir%>/b.js" 
] 

Gruntfile.js看起來是這樣的:

module.exports = function(grunt) { 

grunt.initConfig({ 
    concat: { 
     "options": {"separator": ";"}, 
     "build": { 
      "src": "<%= grunt.template.process(grunt.file.read('./config/js.json'),{data: {js_dir: './src/js'}})%>" 
        , 
      "dest": "build/app.js" 
     } 
    } 
}); 

grunt.loadNpmTasks('grunt-contrib-concat'); 

grunt.registerTask('default', ['concat']); 
}; 

當我運行一個空的輸出文件由,因爲源列表爲空:

... 
Reading ./config/js.json...OK 
Files: [no src] -> build/app.js 
Reading ./config/js.json...OK 
Writing out...OK 
Writing build/app.js...OK 
File "build/app.js" created. 

Done, without errors. 

爲了驗證我的邏輯,我通過更改src屬性來拋棄已處理的源列表:

"src": "<%= grunt.file.write('out',grunt.template.process(grunt.file.read('./config/js.json'),{data: {js_dir: './src/js'}}))%>" 

out文件顯示,模板處理邏輯的內容是有效的:

[ 
    ".src/js/a.js", 
    ".src/js/b.js" 
] 

由於src財產accepts a hardcoded JSON array of source files我的猜測是,源列表的結合模板完成之前完成。

gruntjs詳細輸出顯示連接之前和之後的讀數config/js.json,使我困惑。

我試着重寫config/js.json文件,以便所有的JSON數組都適合一行但無濟於事。

如果可以這樣做,請告訴我如何。如果無法完成,請告訴我爲什麼。

我的環境:

  • 咕嚕:咕嚕-CLI v0.1.9,咕嚕v0.4.1
  • 的NodeJS:v0.11.6預
  • 操作系統:Linux本地主機3.2.0-23泛型#36 -Ubuntu x86_64 GNU/Linux

回答

4

Grunt配置將在讀取配置時處理模板。所以你不需要額外的grunt.template.process。假設config/js.json是有效的JSON只是這樣做:

module.exports = function(grunt) { 

grunt.initConfig({ 
    js_dir: 'src/js', 
    concat: { 
     options: {separator: ";"}, 
     build: { 
      src: require('./config/js.json'), 
      dest: "build/app.js" 
     } 
    } 
}); 

grunt.loadNpmTasks('grunt-contrib-concat'); 

grunt.registerTask('default', ['concat']); 
}; 

永遠記住Gruntfiles是JavaScript和不JSON。

相關問題