I am using generator-angular and needed to inject environment variables.
As it turns out it was really simple using grunt-ng-constant
To install ng-constant
For development look for this section and add the ngconstant:development
To install ng-constant
npm install grunt-ng-constant --save-devWe need to then add ngconstant to our Grunfile in the init section
// Define the configuration for all the tasks grunt.initConfig({ //... ngconstant: { options: { space: ' ' }, // Environment targets development: [{ dest: '.tmp/scripts/config.js', wrap: '"use strict";\n\n <%= __ngModule %>', name: 'config', constants: { ENV: { name: 'development', foo: 'We are in development!' } } }], production: [{ dest: '.tmp/scripts/config.js', wrap: '"use strict";\n\n <%= __ngModule %>', name: 'config', constants: { ENV: { name: 'production', foo: 'We are in production!' } } }] },Make sure that you have the destination in production and development set to .tmp. I was facing problems that the config files where not generated properly.
For development look for this section and add the ngconstant:development
grunt.task.run([ 'clean:server', 'ngconstant:development',//add this 'bower-install', 'concurrent:server', 'autoprefixer', 'connect:livereload', 'watch' ]);And for build add ngconstant:production
grunt.registerTask('build', [ 'clean:dist', 'ngconstant:production',//add this 'bower-install', 'useminPrepare', 'concurrent:dist', 'autoprefixer', 'concat', 'ngmin', 'copy:dist', 'cdnify', 'cssmin', 'uglify', 'rev', 'usemin', 'htmlmin' ]);In our index html we need to include the config file
<!--build:js({.tmp,app}) scripts/scripts.js --> <script src="/scripts/app.js"></script> <script src="/scripts/config.js"></script> <!-- endbuild -->If you now run grunt serve or grunt build this will generate following module
"use strict"; angular.module("config", []) .constant("ENV", "production") .constant("apiEndpoint", "http://api.memoflo.com") ;Inject the module into your app
angular.module('myApp', [ 'config' ])Now whenever you require you can inject ENV as a dependency and use
angular.module('myApp') .controller('Ctrl', function (ENV) { alert(ENV.foo); });Happy coding!