Loads configuration files depending on the environment, the users individual configuration, additional configuration files that are explicitly defined and CLI parameters.
Creates a configurations hash out of several overlapping configuration files.
baseDir
the directory configurations are loaded fromadditionalParameters
optional additional Parameters e.g. from cli arguments
The config file default.(js|json)
is always loaded and is the base configuration.
The environment is used to load an additional configurations file.
Naming convention is {environment}.(js|json)
.
The environment configuration is optional.
For local development an configuration individual for every developer is useful.
Will be only loaded if the environment is development
.
Naming convention is user.{userName}.(js|json)
.
The user configuration is optional.
Additonal parameters can be specified via a options hash that will be merged into the configuration. cli arguments are a possible source.
Via the parameters hash the path to an additonal configurations file can be specified.
The key for the options hash is externalconfig
.
module.exports = {
foo: 'bar',
bax: 'baz',
spam: 'eggs'
};
module.exports = {
spam: 'eggs222'
};
var path = require('path');
var c = require('configurations');
var configuration = c.load(path.join(__dirname, '/config'), {
bax: 'bazzzz',
externalconfig: '/foo/bar/optionalConfig.js'
});
{
foo: 'bar',
bax: 'bazzzz',
spam: 'eggs222'
}
The file example/example.js
contains the following content:
var configuration = configurations.load(path.join(__dirname, '/config'), {
externalconfig: path.join(__dirname, 'config', 'optional.js'),
foo: 'foo-cli'
});
Run it with the following parameters:
$ NODE_ENV=development node example/example.js
result:
{ "a": "b", "foo": "foo-cli", "bax": "baz-development", "spam": "eggs2" }
$ NODE_ENV=production node example/example.js
result:
{ "a": "b", "foo": "foo-cli", "bax": "baz-production", "spam": "eggs2" }
$ NODE_ENV=foo node example/example.js
result:
{ "a": "b", "foo": "foo-cli", "bax": "baz", "spam": "eggs2" }