confit

Environment-aware configuration.

confit

Simple, environment-based configuration. confit loads a default JSON configuration file, additionally loading environment-specific files, if applicable. It will also process the loaded files using any configured shortstop protocol handlers. (See Options below.)

var confit = require('confit');
  • options (String | Object) - the base directory in which config files live or a configuration object. If no arguments is provided, defaults to the directory of the calling file. Signature function (err, config) {}
  • returns - config factory.
'use strict';
 
var path = require('path');
var confit = require('confit');
 
var basedir = path.join(__dirname, 'config');
confit(basedir).create(function (errconfig) {
    config.get; // Function 
    config.set; // Function 
    config.use; // Function 
 
    config.get('env:env'); // 'development' 
});
  • addOverride(filepath) (or) addOverride(obj) - Use this to add file (.json or .js), to merge with the config datastore and override the overlapping data if any. Alternatively, you can also pass a json object to override.
  • addDefault(filepath) (or) addDefault(obj) - Use this to add default file (.json or .js), to merge with the config datastore and serve as the default datastore. Alternatively, you can also pass a json object for defaults.
  • create(callback) - Creates the config object, ready for use. Callback signature: function (err, config) {}
// All methods besides `create` are chainable 
confit(options)
    .addDefault('./mydefaults.json')  //or .addDefault({foo: 'bar'}) 
    .addOverride('./mysettings.json') //or .addOverride({foo: 'baz'}) 
    .create(function (errconfig) {
        // ... 
    });
 
// - or - 
// 
// var factory = confit(options); 
// factory.addOverride('./mysettings.json'); 
// factory.create(function (err, config) { 
//     // ... 
// }); 
  • basedir (String) - the base directory in which config files can be found.
  • protocols (Object) - An object containing a mapping of shortstop protocols to handler implementations. This protocols will be used to process the config data prior to registration.
  • defaults (String) - the name of the file containing all default values. Defaults to config.json.
'use strict';
 
var path = require('path');
var confit = require('confit');
var handlers = require('shortstop-handlers');
 
 
var options = {
    basedir: path.join(__dirname, 'config');
    protocols: {
        file: handlers.file,
        glob: handlers.glob
    }
};
 
confit(options).create(function (errconfig) {
    // ... 
});
  • get(key) - Retrieve the value for a given key. Colon-delimited keys can be used to traverse the object hierarchy.
  • set(key, value) - Set a value for the given key. Colon-delimited keys can be used to traverse the object hierarchy.
  • use(obj) - merge provided object into config.
config.set('foo', 'bar');
config.get('foo'); // 'bar' 
 
config.use({ foo: 'baz' });
config.get('foo'); // 'baz' 
 
config.use({ a: { b: { c: 'd' } } } );
config.get('a:b:c'); // 'd' 

By default, confit loads process.env and argv values upon initialization. Additionally, it creates convenience environment properties prefixed with env: based on the current NODE_ENV setting, defaulting to development. It also normalizes NODE_ENV settings to the long form, so dev becomes development, prod becomes production, etc.

// NODE_ENV='dev' 
config.get('NODE_ENV');        // 'dev' 
config.get('env:env');         // 'development' 
config.get('env:development'); // true 
config.get('env:test');        // false 
config.get('env:staging');     // false 
config.get('env:production');  // false 
// NODE_ENV='custom' 
config.get('NODE_ENV');        // 'custom' 
config.get('env:env');         // 'custom' 
config.get('env:development'); // false 
config.get('env:test');        // false 
config.get('env:staging');     // false 
config.get('env:production');  // false 
config.get('env:custom');      // true