2012-09-13 60 views
12

有沒有辦法從package.json文件中將數組傳遞給grunt.js?我嘗試了幾種不同的方式,但他們都沒有效果。我目前有:如何將package.json數組傳遞給grunt.js

/*global module:false*/ 
module.exports = function(grunt) { 

    // Project configuration. 
    grunt.initConfig({ 
    pkg: '<json:package.json>', 

    lint: { 
     files: '<%= pkg.lint.join(", ") %>' 
    } 

    // Default task 'lint qunit concat min' 
    grunt.registerTask('default', 'lint'); 
}; 

的package.json

{ 
    "lint": [ 
       "grunt.js", 
       "test.js" 
      ] 
} 

,我已經能夠找到的是在陣列的特定指數來傳遞的唯一解決方案;例如<%= pkg.lint [0]%>。 在此先感謝您的幫助!

+2

你嘗試'<%= pkg.lint%>'呢? lint任務似乎接受一個數組,而不是逗號分隔的文件列表... –

+0

是的,我也試過。奇怪的是我可以傳入一個索引到數組中,例如pkg.lint [0],並且它會刪除該特定文件。 –

+0

作爲一種快速調試方法,嘗試將最後一行更改爲'grunt.registerTask('default','lint',function(){console.log(grunt.config('lint'))});'看看在控制檯中輸出什麼...... –

回答

24

由於在節點來看,你可以訪問的package.json像gruntjs:

var package = require('./package.json'), 
    property = package.property[0]; 
2

我認爲<%= … %>語法(Underscore's template system中的變量插值)只能輸出字符串,而不是數組/對象。

試試這個:

lint: { 
    files: '<config:pkg.lint>' 
} 

我發現這個語法咕嚕的jQuery init task

+0

感謝德米特里,我試過了,但是我得到無法讀取「」文件(錯誤代碼:ENOENT)。使用--force繼續。試圖。 –

+0

這真的很奇怪,如果你用''刪除這行,你不會得到這個錯誤?該錯誤似乎發生在文件未找到時... –

1
grunt.initConfig({ 
    lint: grunt.file.readJSON('package.json').lint, 
});