2015-04-16 144 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轻松更改它。

相关问题