code: function(configPath, configNames, config) {
  	var configsUsed = [];
  
  	config = config || projectConfig;
  
  	// work with the raw configuration object
  	if (config && config.root) {
  		config = config.root();
  	}
  
  	config = convict(config);
  	configPath = path.resolve(appPath, configPath);
  	configNames = configNames || [];
  
  	configNames.forEach(function(configName) {
  		var file;
  
  		// Ignore local config in production mode
  		if (configName == 'local' && nodeEnv === 'production') { return; }
  
  		file = path.join(configPath, 'config-'+configName);
  		file += configName === 'default' ? '.js' : '.json';
  
  		if (fs.existsSync(file)) {
  
  			if (configName === 'default') {
  				config = convict( require(file) );
  				config.load(dynamicDefaults);
  			}
  			else {
  				config.loadFile( file );
  			}
  
  			// logging
  			configName === 'default' ? configsUsed.push('xtc defaults') : configsUsed.push(configName);
  		}
  	});
  
  	// be informative
  	!process.env.testRun
  		&& configsUsed.push('env', 'args')
  		&& console.log('configuration:', configsUsed.join(' < '));
  
  	return config;
  }
docs: Create a configuration from different files (as available).
  @param {String} configPath
  @param {Array} configNames
  @param {Object} [config] – Optional config to inherit, defaults to projectConfig
  @returns {Object} – Convict configuration object