Conf node module loader.
yarn add @neo9/n9-node-confor
npm install --save @neo9/n9-node-conf- Drop Node.js V 16 support as it has reached end of life
- Change extendConfig setting from
stringtoobject. Example :
| Before (V1) | After (V2) |
|---|---|
|
|
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'),
});Type: string
Required
Path to the folder containing the configuration files. See the structure for more details.
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 |
Type: object
Required
To describe where to find extension configuration. One of absolute or relative is required.
Type: string
Required if relative is not filled
Absolute path to the extension configuration.
Example : Path.join(__dirname, 'conf/env.json')
Type: string
Required if absolute is not filled
Relative path to the conf folder path
Example : './env.json'
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}
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})
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]
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.
Type: object
Default undefined, no override
Override the conf at the end of loading.
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.
Type: N9ConfMergeStrategy
Default : N9ConfMergeStrategy.V2
Merge strategy to use to merge override.
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.
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,
},
};To display the logs of the module, you can use DEBUG=n9-node-conf.