2.0.0 • Published 1 year ago

@neo9/n9-node-conf v2.0.0

Weekly downloads
90
License
GPL-3.0-or-later
Repository
github
Last release
1 year ago

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

given2nd try3rd try
jsonyamlyml
yamlymljson
ymljsonyaml
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.

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.

2.0.0-rc.2

1 year ago

2.0.0-rc.3

1 year ago

2.0.0-rc.0

1 year ago

2.0.0-rc.1

1 year ago

2.0.0

1 year ago

1.4.1

3 years ago

1.4.0

4 years ago

1.3.2

5 years ago

1.3.1

5 years ago

1.2.3

5 years ago

1.3.0

5 years ago

1.2.0

5 years ago

1.2.2

5 years ago

1.2.1

5 years ago

1.1.1

7 years ago

1.0.6

7 years ago