Somewhat easily reconfigure Ionic's config.xml for different environments by running npm run ionic-config <environment>.
View working example: https://github.com/joshdholtz/ionic-configurator-example
$: npm install --save-dev https://github.com/joshdholtz/ionic-configurator.git$: npm run ionic-config <environment>where <environment> environment will look for a file ./ionic-configurator/env.<environment>.json
Add ionic-config to your package.json scripts. This will allow you to run npm run ionic-config <environment> instead of having to run ./node_modules/.bin/ionic-config <environment>
"scripts": {
"ionic-config": "ionic-config"
}Create a config.tmpl.xml file in the ionic-configurator directory. This is the template config.xml file that all environment specific config.xml files will be made from.
The config.tmpl.xml file uses Mustache templating
<?xml version='1.0' encoding='utf-8'?>
<widget id="{{id}}" version="{{version}}" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<!--- These hooks are used to modify the config.tmpl.xml file when plugins are added and removed -->
<hook src="ionic-configurator/hooks.js" type="before_plugin_add" />
<hook src="ionic-configurator/hooks.js" type="after_plugin_add" />
<hook src="ionic-configurator/hooks.js" type="before_plugin_rm" />
<hook src="ionic-configurator/hooks.js" type="after_plugin_rm" />
<name>{{name}}</name>
<description>{{description}}</description>
<author email="hi@ionicframework" href="http://ionicframework.com/">Ionic Framework Team</author>
<content src="index.html" />
...
</widget>Create environment files using the pattern env.<environment>.json in ionic-configurator. These keys should match up with the Mustache templating used in the config.tmpl.xml file.
{
"id": "com.joshholtz.staging.IonicApp",
"version": "1.1.2",
"name": "Ionic App (Staging)",
"description": "This awesome Ionic app description <3"
}
{
"id": "com.joshholtz.IonicApp",
"version": "1.1.2",
"name": "Ionic App",
"description": "This awesome Ionic app description <3"
}
This hooks is used when plugins are added and removed. This will temporarily move the template to config.xml and then back to ionic-configurator/config.tmpl.xml so that the plugin changes are recorded in our templated.
NOTE: This will keep the templated config at config.xml so you will need to re-run ionic-config <environment>
#!/usr/bin/env node
module.exports = function(ctx) {
var Configurator = require('ionic-configurator');
Configurator.hook(ctx.hook);
}