Add environment-centric logic to your Grunt builds
This plugin requires Grunt ~0.4.1
If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-environment --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile with this snippet of JavaScript:
grunt.initConfig({
// ...
environment: {
default: 'development',
environments: ['development', 'production'],
version: function(){
return grunt.file.readJSON('package.json')['version']
},
file: 'build.json'
}
// ...
});
grunt.loadNpmTasks('grunt-environment');
Any of the above options can also be a function except for the environments
array.
The grunt-environment plugin will add the tasks environment:development
and
environment:production
(for each entry in your environments
array).
They will maintain state in a file called .grunt/environment.json
in your project directory.
There are two ways to create Grunt configuration for your environments.
This bit of syntactic sugar added in v0.4.0
covers most common scenarios.
config: {
hostname: 'http://development.example.com', // (unaffected)
development: {
output_dir: 'build/development'
},
production: {
output_dir: 'build/production'
},
environment: {
default: 'development',
environments: ['development', 'production']
}
}
The environment you are using gets merged back into the main config:
grunt environment:production
...makes the config behave as if it were:
config: {
hostname: 'http://development.example.com', // (unaffected)
output_dir: 'build/production',
}
For more complex configuration, you can also use grunt.config.get('environment.env')
or it's handy alias
grunt.environment()
in your Grunt tasks to create conditions around these environments.
// Environment-specific configuration for grunt-contrib-clean.
// When the **development** environment is active, `grunt clean` will remove files inside `build/development`
// When the **production** environment is active, `grunt clean` will remove files inside `build/production`
clean: {
build: (function() {
switch (grunt.environment()) {
case 'development':
return ['build/development'];
case 'production':
return ['build/production'];
}
})()
}
v0.2.0
adds the aliasgrunt.environment()
to the currentenv
value.
The additional keys timestamp
and version
are included as well.
You may find it useful to pass
build
as a variable into a template for your application to use at runtime.
- Extend to allow pulling environment vars from global config (see #4)
- Adds Branched Object merge feature suggested by @colwilson
- Adds dependency
lodash
(Grunt external libraries are deprecated) - Original configuration is now preserved upon initialization as
config.environment.meta
- No longer necessary to try/catch initialize manually after tasks are loaded
- Adds
grunt environment
(with no subtask) to echo current environment from file
- Small fixes
- Adds
grunt.environment()
alias - Bit of overall refactoring
- Moves default storage from
build.json
to.grunt/environment.json
- Adds configurable options
default
,environments
,version
,file
- First release