2015-04-16 78 views
3

我有一個由Grunt構建的HTML5 + JS代碼。我目前正在建立一個開發環境和一個生產環境。我可以將參數從Grunt傳遞給Javascript嗎?

有沒有辦法將參數從Grunt傳遞給JS代碼?這樣我就可以傳遞開發/生產服務器的IP,具體取決於我正在構建哪一個。

順便說一下,我注意到Grunt選項允許定義Grunt參數(http://gruntjs.com/api/grunt.option),但是如何在JS代碼中使用它們?

如果有更好的方法來爲JS項目設置兩個環境,請讓我知道。

謝謝!

+0

這將是一個好主意,看看這個問題:http://stackoverflow.com/questions/12401998/have-grunt-generate-index-html-for-different-setups – kartikluke

回答

0

有幾個插件可以幫助你。例如
includereplace爲例。
npm install grunt-include-replace --save-dev

您可以在Gruntfile中定義要替換的變量。
然後鏈接到您要運行該任務的文件。
如果您想通過CLI添加該值,則可以按照您的建議使用grunt.option API。

Gruntfile.js

module.exports = function(grunt) { 

    var ip = grunt.option('ip') || '127.0.0.1'; 

    grunt.initConfig({ 
    includereplace: { 
     dev: { 
     options: { 
      globals: { 
      ip: ip 
      }, 
     }, 
     src: 'file.js', 
     dest: 'dest/' 
     }, 
     prod: { 
     options: { 
      globals: { 
      ip: ip 
      }, 
     }, 
     src: 'file.js', 
     dest: 'dest/' 
     }  
    } 
    }); 

    grunt.loadNpmTasks('grunt-include-replace'); 

    grunt.registerTask('dev', ['includereplace:dev']); 
    grunt.registerTask('prod', ['includereplace:prod']); 

}; 

file.js

var ip = '@@ip'; 

我分開的開發和生產線配置,這樣你就可以添加不同的變量,每個環境。

正在運行grunt prod --ip=XXX.XXX.XXX.XXX會在dest文件夾中產生一個新文件,並帶有新值。

如果您不喜歡@@佔位符約定,您可以通過Custom Options API輕鬆更改它。

相關問題