rcfg
Search for configurable package.json-aware sync/async rc alternative ends here.
Installation
npm i rcfg --save
Usage
var rc = ; // load synchronously (looks for .apprc, <package.json as JSON>['app'], ...)// (for complete list of sources see "Defaults" -> "Load order"))var cfg = ; // load asynchronously
You might want to use rcfg
together with
object-path (or similar), like so:
var cfg = 'app'; // check that path existscfg; // get deep property (with optional default value)cfg // get the first non-undefined valuecfg;
Defaults
Load order
sources higher in the list take precedence over those located lower
-
env variables:
${name}_key(__anotherkey)?
example:
name_foo__bar__baz=qux
translates to{foo: {bar: {baz: "qux"}}}
-
command line:
--config <file>
-
closest
.${name}rc
* (search will stop on reachingpackage.json
) -
closest
package.json
(content of[pkgField || name]
) -
~/.${name}rc
* -
~/.${name}/config
*** -
~/.config/${name}rc
** -
~/.config/${name}/config
*** -
/etc/${name}rc
** -
/etc/${name}/config
*** -
defaults (
rcfg('name', {def: {foo: {bar: "baz"}}})
)
* or .${name}rc.{json,yml,yaml}
, .${name}.{json,yml,yaml}
** or ${name}rc.{json,yml,yaml}
, ${name}.{json,yml,yaml}
*** config.json
, config.{yml,yaml}
will be tried too
This list is controlled by src
option.
Formats
Config files can be written in json
or yaml
. Additional file types
can be registered using fmt
option. For example, in order to support
toml all you need to do is:
var toml = ; var cfg = ;
Merge strategy
deep (e.g. ~/.apprc
{foo: {bar: {baz: 1}}, dox: -3}
+ .apprc {foo: {bar: {qux: 2}}, dox: 3}
=
{foo: {bar: {baz: 1, qux: 2}}, dox: 3}
). Can be overwritten with merge
option.