2014-09-24 57 views
2

我是新來的grunt。Grunt在For循環中運行

我有一個gruntfile,適用於單個版本。有幾個目標鏈接在一起完成該過程。問題是我需要使用可變數據創建幾個不同的版本。我想弄清楚如何在我的gruntfile中做到這一點。

今天,做一個構建,我只需要運行

grunt --foo=bar build 

grunt --foo=baz build 

我想什麼,並試圖做的是建立一個集結所有使用數組來定義foo數據的目標,如下所示:

grunt.registerTask('build-all', function() { 
    var foos = ["bar", "baz"]; 
    for (var i in foos) { 
     grunt.config.set("foo", foos[i]); 
     grunt.task.run("build"); 
    } 
}); 

從外觀看,似乎運行任務是非阻塞的。這意味着「foo」在第一次運行之前被設置爲「baz」,爲相同的值運行兩次。

在這種情況下是否有更好的方法來設置參數/選項?或者以阻塞的方式運行任務?

+3

看起來你需要使用像[grunt-multi](https://www.npmjs.org/package/grunt-multi) – 2014-09-25 01:14:49

+0

謝謝,這實際上對我有效。幸運的是,我不能接受評論作爲答案,所以沒有積分給你:( – 2014-09-25 14:34:45

回答

4

我最近遇到了這個問題,並寫了grunt-galvanize來幫助解決這個問題。下面是它的工作原理,應用到你的例子:

grunt.registerTask('build-all', function() { 
    var foos = ["bar", "baz"]; 
    var galvanizeConfig = []; 

    for (var i in foos) { 
     galavanizeConfig.push({configs: {foo: foos[i]}}); 
    } 
    grunt.option('galvanizeConfig', galvanizeConfig); 
    grunt.task.run(['galvanize:build']); 
}); 

這將運行與每個galvanizeConfig指定的選項/ CONFIGS的構建任務。

PS。我還在需要併發的情況下使用grunt-multi,但對於不需要併發的情況,grunt-galvanize是一種更簡單的工具。