2016-06-10 51 views
3

我試圖在grunt中運行一個任務,它轉到一個URL並將響應保存在一個文件中,但我希望它轉到不同的URL並相應地創建不同的文件。 因此,我正在運行一個循環,並在每次迭代中更改config中的數據。 但是任務運行會追加到循環結尾,因此當循環完成後,更改config中的所有值時,它會使用config中最新更改的值運行任務30次,最後只會一次又一次創建1次文件30次。 這裏是我的代碼 如何在for循環中運行grunt任務,同時動態更改config中的數據?

module.exports = function(grunt){ 
 
\t grunt.initConfig({ 
 
\t \t id:0, 
 
\t \t http:{ 
 
\t \t \t devel:{ 
 
\t \t \t options: { 
 
\t \t \t url: 'http://127.0.0.1:8000/foo/<%= id %>/' 
 
\t \t \t }, 
 
\t \t \t dest: 'www/foos/foo<%= id %>.json' 
 
\t \t \t } 
 
\t \t } 
 
\t }); 
 
\t grunt.loadNpmTasks('grunt-http'); 
 
\t grunt.registerTask("default", function(){ 
 
    for (var i = 30; i > 1; i--) { 
 
     grunt.config.set("id", i); 
 
     var d = grunt.config.get("id"); 
 
     grunt.log.writeln("id = "+d); 
 
     grunt.task.run("http"); 
 
    } 
 
    }); 
 
};

+0

也許這個鏈接會有所幫助:http://stackoverflow.com/a/37716046/3397771 – 76484

+0

這是沒有幫助的,因爲我想通過一些參數的任務本身,在一定意義上。 (要傳遞的參數將是循環的迭代索引) –

回答

0

我不是100%肯定它是什麼,你現在要做的,但是這個代碼應該工作。您需要爲每個要運行的http任務創建一個唯一的任務。

module.exports = function(grunt){ 
    grunt.initConfig({ 
     http:{ 
     } 
    }); 
    grunt.loadNpmTasks('grunt-http'); 

    var http = {}; 

    for (var i = 5; i > 1; i--) { 
     grunt.log.writeln("id = " + i); 

     http['devel' + i] = { 
      options: { 
       url: 'http://127.0.0.1:8000/foo/' + i 
      }, 
      dest: 'www/foos/foo' + i + '.json' 
     }; 
    } 

    grunt.config.set("http", http); 

    grunt.registerTask("default", "http"); 
}; 
+0

感謝您的迴應。我的問題早已解決。我也用過這樣的東西。 –