Skip to content
Configure Ionic (Cordova) config.xml files for individual environments using Mustache templating
JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
ionic-configurator
scripts
src
.gitignore
README.md
package-lock.json
package.json

README.md

Ionic Configurator

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

Installation

$: npm install --save-dev https://github.com/joshdholtz/ionic-configurator.git

Commands

$: npm run ionic-config <environment>

where <environment> environment will look for a file ./ionic-configurator/env.<environment>.json

Setup

package.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"
}

ionic-configurator/config.tmpl.xml

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>

Environment file

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.

ionic-configurator/env.staging.json

{
  "id": "com.joshholtz.staging.IonicApp",
  "version": "1.1.2",
  "name": "Ionic App (Staging)",
  "description": "This awesome Ionic app description <3"
}

ionic-configurator/env.production.json

{
  "id": "com.joshholtz.IonicApp",
  "version": "1.1.2",
  "name": "Ionic App",
  "description": "This awesome Ionic app description <3"
}

ionic-configurator/hooks.js

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);
}
You can’t perform that action at this time.