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); }