我可以将参数从Grunt传递给Javascript吗?

时间:2015-04-16 15:14:36

标签: javascript html deployment gruntjs environment-variables

我有一个由Grunt构建的HTML5 + JS代码。我目前正在设置开发和生产环境。

有没有办法将参数从Grunt传递给JS代码?这样我就可以传递开发/生产服务器的IP,这取决于我构建的那个。

顺便说一句,我注意到Grunt选项允许定义Grunt参数(http://gruntjs.com/api/grunt.option),但是如何在JS代码中使用它们?

如果为JS项目设置两个环境有更好的做法,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分: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';

我分离了dev和prod配置,因此您可以为每个环境添加不同的变量。

运行grunt prod --ip=XXX.XXX.XXX.XXX会在dest文件夹中生成一个带有新值的新文件。

如果您不喜欢@@占位符约定,则可以通过Custom Options API轻松更改它。