Geek Configuration Manager for Node.js - The complete solution for managing config settings for your Node.js application
Install
@geek/config
npm install @geek/config
const Config = require('@geek/config');
// single profile
const config1 = new Config({
cwd: __dirname,
name: 'myapp',
profile: 'dev',
overrides: { property2: 'override-value' },
defaults: { property9: 'default-value' },
});
// multiple profiles
const config2 = new Config({
cwd: __dirname,
name: 'myapp',
profiles: [ 'dev', 'ios' ],
overrides: { property2: 'override-value' },
defaults: { property9: 'default-value' },
});
priority | source | example | location |
---|---|---|---|
1. | process.env | MYAPP_PROPERTY1="environment-value" |
environment variable |
2. | overrides | { "property1": "override-value" } |
parameter: overrides |
4. | files | ['~/.titanium/config.json', '~/.tn.json'] |
parameter: files |
5. | user profile config file | myapp.dev.user.json |
project directory |
6. | user config file | myapp.user.json |
project directory |
7. | project profile config file | myapp.dev.project.json |
project directory |
8. | project config file | myapp.project.json |
project directory |
9. | global profile config file | myapp.dev.global.json |
home config directory |
10. | global config file | myapp.global.json |
home config directory |
11. | system config file | myapp.system.json |
home config directory |
12. | default values | { "property1": "default-value" } |
parameter: defaults |
NOTE: Currently only the file extension
.json
is supported. Support for more file extensions will be added very soon.
This following part of the documentation has not been updated yet to reflect support for profiles but it will be updated soon.
cost Config = require('@geek/config');
const config = new Config({ name: 'myapp' });
process.env variables
(if exists)
Loaded objects fromm all the manually entered filenames:
files
(from parameter )
One of the following:
myapp.user.json5
(if exists)myapp.user.yaml
(if exists)myapp.user.yml
(if exists)myapp.user.json
(if exists)
One of the following:
myapp.project.json5
(if exists)myapp.project.yaml
(if exists)myapp.project.yml
(if exists)myapp.project.json
(if exists)
One of the following:
~/.myapp/global.json5
(if exists)~/.myapp/global.yaml
(if exists)~/.myapp/global.yml
(if exists)~/.myapp/global.json
(if exists)
One of the following:
~/.myapp/system.json5
(if exists)~/.myapp/system.yaml
(if exists)~/.myapp/system.yml
(if exists)~/.myapp/system.json
(if exists)
cost Config = require('@geek/config');
const config = new Config({ name: 'myapp', overrides: { variable2: 'overrides' }, defaults: variable9: 'defaults' });
process.env variables
(if exists)overrides
(from parameter)
Loaded objects fromm all the manually entered filenames:
files
(from parameter )
One of the following:
myapp.user.json5
(if exists)myapp.user.yaml
(if exists)myapp.user.yml
(if exists)myapp.user.json
(if exists)
One of the following:
myapp.project.json5
(if exists)myapp.project.yaml
(if exists)myapp.project.yml
(if exists)myapp.project.json
(if exists)
One of the following:
~/.myapp/global.json5
(if exists)~/.myapp/global.yaml
(if exists)~/.myapp/global.yml
(if exists)~/.myapp/global.json
(if exists)
One of the following:
~/.myapp/system.json5
(if exists)~/.myapp/system.yaml
(if exists)~/.myapp/system.yml
(if exists)~/.myapp/system.json
(if exists)
default values
defaults
(from parameter)
- process.env
- manual overrides
- myapp.user.json
- myapp.project.json
- myapp.global.json
- default values
if passed in environment only:
--profile dev
- process.env
- manual overrides
- myapp.dev.user.json
- myapp.user.json
- myapp.dev.project.json
- myapp.project.json
- myapp.dev.global.json
- myapp.global.json
- default values
if passed in:
--local-only
- process.env
- manual overrides
- myapp.dev.user.json
- myapp.user.json
- myapp.dev.project.json
- myapp.project.json
- default values
if passed in specific config file:
--config mytest.json
(with no environment specified)
- process.env
- manual overrides
- mytest.json
- myapp.user.json
- myapp.project.json
- myapp.global.json
- default values
if passed in specific config file:
--config mytest.json --profile dev
- process.env
- manual overrides
- mytest.json
- myapp.dev.user.json
- myapp.user.json
- myapp.dev.project.json
- myapp.project.json
- myapp.dev.global.json
- myapp.global.json
- default values
if passed in:
--only mytest.json
- process.env
- manual overrides
- mytest.json
- default values
Have an idea or a comment? Join in the conversation here!