bs-node-config v0.1.0
BsNodeConfig
Config library for nodejs, similar to node-config but strongly typed with validated type parsing. No need for Js.Nullable.t shims typical when just binding to js-libs.
Usage Examples
Assuming You Write file MyConfig.re:
module C = BsNodeConfig.Config;
/*
* loadConfig with default options searches for .json and .yaml files from ./config/
* (loading may produce an error, therefore using getExn, which will throw if loading had errors)
*/
let config: C.t = C.loadConfig() |> C.getExn;Usage in other files/modules:
module C = BsNodeConfig.Config;
let config = MyConfig.config;
let myServerHost: string = config |> C.key("server.host") |> C.parseStringExn;
let myList: list(string) = config |> C.key("listOfWords") |> C.parseList(C.parseString) |> C.getExn;
/* This alternative style works too: */
let myServerPort: int = C.(fetchExn("server.port", parseInt, Config.config));Config loading
Function C.loadConfig() searches config values from following sources in following order:
1. Loads config files:
1. From directory process.cwd() + "/config/" OR if env variable NODE_CONFIG_DIR is defined, that is used instead:
2. default.{json,yaml} is load if exists
3. Profile name defined by NODE_CONFIG_ENV if exists or NODE_ENV if exists -> loads file ${profileName}.{json,yaml} if exists
4. local.{json,yaml} is load if exists
2. Loads Environment Variables
1. Loads CONFIG_JSON contents
2. Reads file custom-environment-variables.{json,yaml}, which contains ENV variable name override definitions for various config keys (this is identical to: node-config), -> loads overrides from the defined env variables that are found.
3. Fallback to empty config if nothing from the above exists.