0.2.8 • Published 6 years ago
@blueprod/config v0.2.8
blueprod-config
This module allows you to manage your application configurations in popular ways:
- (Recommended) Twelve-Factor App: with one main .env and .env.{{process.NODE_ENV}} for example: .env.test, .env.production, .env.development (https://github.com/motdotla/dotenv)
- But, our existing software is often dependent on the two other common formats: json & yaml, so we also support:- All file with *.yaml (.json) -> will be merged regardless to the duplication.
- And maybe one of the following (if the file name matches with process.env.NODE_ENV): production.yaml (.json), test.yaml (.json) development.yaml (.json)
 
Default App Structure
(Example for production)
rootAppPath:
   | config (supported to load recursively)
   |   |- default.yaml
   |   |- default.json
   |   |- production.yaml
   |
   |- .env
   |- .env.${NODE_ENV}How To Use
Root application path
You have several options to provide the root application path or it will be detected
- config.load({rootAppPath: '/home/xxx')
- global.rootAppPath
- or process.env"BLUEPROD_ROOT_APP_PATH"
- or we will use the node module "app-root-path"
const config = require('blueprod-config').load();
let configValue = config.get('app_key1')Options
You can put these parameters in .env or function arguments.
- CONFIG_DIR_NAME: the config folder name (i.e. config)
- ROOT_CONFIG_PATH: The root application configuration path. If this param is provided then CONFIG_DIR_NAME shall be ignored.
Merge Rules
({}, { a: 'a' }, { a: 'bb' })         // => { a: "bb" }
({}, { a: 'a'  }, { a: undefined })   // => { a: "a" }
({}, { a: 'a'  }, { a: null })        // => { a: null }
({}, {a:{a:'a'}}, {a:{b:'bb'}})       // => { "a": { "a": "a", "b": "bb" }}
({}, {a:['a']}, {a:['bb']})           // => { "a": [ "bb" ] }
a={a:'a'}; merge(a, {b:'bb'});        // a => { a: "a", b: "bb" }
([], ['a'], ['bb'])                   // => [ "bb" ]
([], ['a','b'], ['bb'])               // => [ "bb", "b" ]License
MIT license
Author
Developed & maintained by EMSA TECHNOLOGY COMPANY LTD (contact @ emsa-technology dot com).