@neo9/n9-node-conf

Conf node module loader

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
@neo9/n9-node-conf
572.0.05 months ago7 years agoMinified + gzip package size for @neo9/n9-node-conf in KB

Readme

n9-node-conf
Conf node module loader.
npm version Travis Coverage license

Installation

yarn add @neo9/n9-node-conf

or
npm install --save @neo9/n9-node-conf

V2 Upgrade

  • Drop Node.js V 16 support as it has reached end of life
  • Change extendConfig setting from string to object.
Example :
Before (V1) After (V2)

{
	...,
	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 :

N9ConfOptions :

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, dmerge(a, c), merge(b, d)
  • v2 : Use built in mechanism. It replace array is any\
a, b + c, dc, 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.json

The module will load these files, every file overwrites the one before:
application.js + ${process.env.NODE_ENV}.js + local.js
  1. If process.env.NODE_ENV is not defined, default to 'development'
  2. If local.js does not exists, it will be ignored.
  3. It will also fetch the package.json of the app to fill its name & 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.