我有一個由Grunt構建的HTML5 + JS代碼。我目前正在建立一個開發環境和一個生產環境。我可以將參數從Grunt傳遞給Javascript嗎?
有沒有辦法將參數從Grunt傳遞給JS代碼?這樣我就可以傳遞開發/生產服務器的IP,具體取決於我正在構建哪一個。
順便說一下,我注意到Grunt選項允許定義Grunt參數(http://gruntjs.com/api/grunt.option),但是如何在JS代碼中使用它們?
如果有更好的方法來爲JS項目設置兩個環境,請讓我知道。
謝謝!
我有一個由Grunt構建的HTML5 + JS代碼。我目前正在建立一個開發環境和一個生產環境。我可以將參數從Grunt傳遞給Javascript嗎?
有沒有辦法將參數從Grunt傳遞給JS代碼?這樣我就可以傳遞開發/生產服務器的IP,具體取決於我正在構建哪一個。
順便說一下,我注意到Grunt選項允許定義Grunt參數(http://gruntjs.com/api/grunt.option),但是如何在JS代碼中使用它們?
如果有更好的方法來爲JS項目設置兩個環境,請讓我知道。
謝謝!
有幾個插件可以幫助你。例如
以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輕鬆更改它。
這將是一個好主意,看看這個問題:http://stackoverflow.com/questions/12401998/have-grunt-generate-index-html-for-different-setups – kartikluke