What is config-chain?
The config-chain package is a utility for managing hierarchical configuration data in Node.js applications. It allows you to load and merge configuration from various sources such as command-line arguments, environment variables, and configuration files. It is useful for applications that need to prioritize configurations from different sources or that need to provide a flexible configuration setup.
What are config-chain's main functionalities?
Loading and merging configurations from multiple sources
This feature allows you to create a new configuration chain and add multiple configuration sources to it. The configurations are merged, with later additions taking precedence over earlier ones. In this example, environment variables and command-line arguments are also included in the configuration chain.
{"ConfigChain": require('config-chain').ConfigChain, "cc": new ConfigChain().add({foo: 'bar'}).add({foo: 'baz', blerg: 'fluff'}).addEnv().addArg() }
Accessing configuration values
Once the configuration chain is set up, you can access configuration values using the 'get' method. This example shows how to retrieve the value of the 'foo' key from the configuration chain.
{"ConfigChain": require('config-chain').ConfigChain, "cc": new ConfigChain().add({foo: 'bar'}), "fooValue": cc.get('foo') }
Using configuration files
Config-chain supports loading configuration from JSON files. You can specify file paths to load and merge configurations from those files. In this example, two configuration files are added to the chain along with environment variables and command-line arguments.
{"ConfigChain": require('config-chain').ConfigChain, "cc": new ConfigChain().addFile('config.json').addFile('/etc/appconfig.json').addEnv().addArg() }
Other packages similar to config-chain
rc
The 'rc' package is similar to config-chain and is used for configuration management. It also loads configuration from command-line arguments, environment variables, and configuration files. However, 'rc' has a simpler API and does not provide the same level of fine-grained control over the order of precedence as config-chain does.
nconf
The 'nconf' package is another alternative to config-chain. It provides a hierarchical configuration with support for files, environment variables, command-line arguments, and atomic object merging. Nconf also includes additional features such as key-value store for configuration data and the ability to make configuration read-only.
convict
Convict is a configuration management library that includes schema-based validation. It allows you to define a schema for your configuration and ensures that the configuration adheres to this schema. Convict can load configurations from JSON files, environment variables, and command-line arguments, similar to config-chain, but with the added benefit of validation.
#config-chain
USE THIS MODULE TO LOAD ALL YOUR CONFIGURATIONS
var cc = require('config-chain')
, opts = require('optimist').argv
, env = opts.env || process.env.YOUR_APP_ENV || 'dev'
var conf =
cc(
opts,
cc.env('myApp'),
path.join(__dirname, 'config.' + env + '.json'),
env === 'prod'
? path.join(__dirname, 'special.json')
: null
path.join(__dirname, 'config', env, 'config.json'),
cc.find('config.json'),
{
host: 'localhost'
port: 8000
})
var host = conf.get('host')
var host = conf.store.host
FINALLY, EASY FLEXIBLE CONFIGURATIONS!
##see also: (proto-list)[https://github.com/isaacs/proto-list/]
##TODO
- add support for more types of parser,
yaml, ini, whatever I can find in npm.
- if string is http://... load config from internet. (useful for devops)