@neo9/n9-node-conf v2.0.0
n9-node-conf
Conf node module loader.
Installation
yarn add @neo9/n9-node-confor
npm install --save @neo9/n9-node-confV2 Upgrade
- Drop Node.js V 16 support as it has reached end of life
- Change extendConfig setting from
stringtoobject. Example :
{
...,
extendConfig: {
key: 'appName'
}
}{
...,
extendConfig: {
key: {
name: 'appName'
}
}
}Usage
n9NodeConf([options])
Options:
- path:
String, default:process.env.NODE_CONF_PATH || './conf/'
Example:
import n9NodeConf from '@neo9/n9-node-conf';
import { join } from 'path';
const conf = n9NodeConf({
path: join(__dirname, 'conf'),
});Options :
path
Type: string\
Required \
Path to the folder containing the configuration files. See the structure for more details.
extendConfig
Type: object\
Default: undefined
To describe extension configuration. Extension configuration ca be a json, yaml or yml file. \
In the order, it will try to load the path given, then the same file changing the extension to another supported.
| given | 2nd try | 3rd try |
|---|---|---|
| json | yaml | yml |
| yaml | yml | json |
| yml | json | yaml |
path
Type: object\
Required \
To describe where to find extension configuration. One of absolute or relative is required.
absolute
Type: string\
Required if relative is not filled \
Absolute path to the extension configuration.\
Example : Path.join(__dirname, 'conf/env.json')
relative
Type: string\
Required if absolute is not filled \
Relative path to the conf folder path \
Example : './env.json'
key
name
Type: string\
Default the app name from package.json.name\
The key to use in configuration extension. The path to load the conf will be {env}.{app name}
format
Type: ExtendConfigKeyFormat\
Default to undefined.\
The format to apply to the packageJSON.name to find the key name. The path to load the conf will be {env}.{format}({app name})
mergeStrategy
Type: N9ConfMergeStrategy (v1 or v2)\
Default: v2\
The merge strategy to use to merge extension configuration with the other.
- v1 : Use lodash merge function. Mainly, merge deeper in arrays\ a, b + c, d → merge(a, c), merge(b, d)
- v2 : Use built in mechanism. It replace array is any\ a, b + c, d → c, d
overridePackageJsonDirPath
Type: string\
Default: undefined, use npm module app-root-dir to find package.json
Used to load package.json, to find app name, app version and with app name to build the path to load the conf extension.
override
Type: object\
Default undefined, no override
Override the conf at the end of loading.
value
Type: object\
Default: undefined, not applied\
Value to override the conf at the end of loading. Merge strategy used is defined bellow. Useful for tests.
mergeStrategy
Type: N9ConfMergeStrategy\
Default : N9ConfMergeStrategy.V2\
Merge strategy to use to merge override.
Structure
conf/
application.ts
development.ts
integration.ts
local.ts # should be in .gitignore
preproduction.ts
production.ts
staging.ts
package.jsonThe module will load these files, every file overwrites the one before:
application.js + ${process.env.NODE_ENV}.js + local.js
- If
process.env.NODE_ENVis not defined, default to'development' - If
local.jsdoes not exists, it will be ignored. - It will also fetch the
package.jsonof the app to fill itsname&version
This module can use a configuration extension, see here for more information.
Example
package.json
{
"name": "my-app",
"version": "0.1.2"
}conf/application.ts
export default {
http: {
port: 6686,
},
};conf/development.ts
export default {};conf/production.ts
export default {
http: {
port: 80,
},
};loadConf.ts
import n9NodeConf from '@neo9/n9-node-conf';
const conf = n9NodeConf();
console.log('const conf =', conf);node loadConf.ts
const conf = {
name: 'my-app',
version: '0.1.2',
env: 'development',
http: {
port: 5000,
},
};NODE_ENV=production node loadConf.ts
const conf = {
name: 'my-app',
version: '0.1.2',
env: 'production',
http: {
port: 80,
},
};Logs
To display the logs of the module, you can use DEBUG=n9-node-conf.
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
4 years ago
4 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
8 years ago
8 years ago