angularjs – 使用Grunt预处理和替换环境变量

我有一个使用grunt的角度应用程序设置,但我希望能够使用grunt作为预处理器来替换变量,我无法找到符合我需要的任何东西.

例如,如果我在配置文件中将主应用程序模块的名称更改为“someAppName”,我想在各种html和js文件中使用类似“ENV.APP_NAME”的内容,并将其替换为适当的值对于那种环境.

理想情况下,我希望在这些行的某处有一个配置文件,可以是.json文件,也可以使用module.exports来公开一个对象,它指定不同环境的值:

{
    APP_NAME:{
        dev: "someAppDev",prod: "someApp"
    },API_BASE:{
        dev: "localhost:8000/",prod: "https://www.some-site.com/api/"
    }
}

然后我可以创建一个grunt任务并将其传递给“dev”或“prod”以使其运行预处理器并用相应的值替换每个实例.我发现这个https://github.com/STAH/grunt-preprocessor但是这些例子令人困惑,我认为这不是我想要的.

有没有这样的东西允许你创建预处理的环境变量并从外部配置文件中读取它们,还是我被迫构建自己的grunt插件?有没有人用grunt取得类似的东西?

编辑:我已经开始为这个特定任务构建一个grunt插件,一旦完成并测试我将在npm上发布

使用 grunt-ng-constant.

Npm安装这个插件

npm install grunt-ng-constant --save-dev

然后在grunt写入配置文件

ngconstant: {
  // Options for all targets
  options: {
    space: '  ',wrap: '"use strict";\n\n {%= __ngModule %}',name: 'config',},// Environment targets
  development: {
    options: {
      dest: '<%= yeoman.app %>/scripts/config.js'
    },constants: {
      ENV: {
        myvar1: 'Hello from devel',myname: 'John Doe'
      }
    }
  },production: {
    options: {
      dest: '<%= yeoman.dist %>/scripts/config.js'
    },constants: {
      ENV: {
        myvar1: 'Hello',myname: 'John Doe'
      }
    }
  }
},

然后添加到grunt任务:

grunt.task.run([
    'clean:server','ngconstant:development','connect:livereload','watch'
  ]);

运行任务将生成带有gruntfile中定义的常量的config.js.
然后将config.js添加到index.html:

<script src="/scripts/config.js" />

将其注入您的应用:

var app = angular.module('myApp',[ 'config' ]);

并注入控制器:

.controller('MainCtrl',function ($scope,$http,ENV) {
      console.log(ENV.myvar1);
  });

您可以通过在gruntfile中设置和设置ng:production或ng:development来为生产设置不同的变量,为开发设置不同的变量.

有关详细信息,请参阅this article说明该过程.

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...