env-friendly-config

1.0.8 • Public • Published

Simple, Environment Friendly Config With Section Substitution and Inheritance

Example config.json:

{
    "default": {
        "logger": {
            "level": "ENV:X_LEVEL:info"
        },
        "things": [
            { "foo": "ENV:X_FOO:bar" }
        ],
        "sp": {
            "type": "memory",
            "connection": {
                "host": "localhost"
            }
        }
    },
    "staging": {
        "logger": "REF:default.logger",
        "things": [
            { "foop": "barp" },
            "REF:default.things[0]"
        ],
        "INHERIT:sp:default.sp": {
            "connection": {
                "host": "10.10.10.10",
                "port": 40
            }
        }
    }
}

Example app.js:

var config = require( 'env-friendly-config' )( './config.json' );
console.log( JSOB.stringify( config, null, 2 ) );

Example run:

X_LEVEL=debug X_FOO=PEEB node app.js

Example output:

{
    "default": {
        "logger": {
            "level": "debug"
        },
        "things": [
            {
                "foo": "PEEB"
            }
        ],
        "sp": {
            "type": "memory",
            "connection": {
                "host": "localhost"
            }
        }
    },
    "staging": {
        "logger": {
            "level": "debug"
        },
        "things": [
            {
                "foop": "barp"
            },
            {
                "foo": "PEEB"
            }
        ],
        "sp": {
            "type": "memory",
            "connection": {
                "host": "10.10.10.10",
                "port": 40
            }
        }
    }
}

enuf said.

Although ...

At the same level in the directory tree as your "config.json", you may have a number of ".env.*" files that will be parsed first into process.env so they are visible in "ENV:..." statements. This is to support keeping .env files out of revision control and keeping secrets in these .env files (which can then be used in docker-compose files, etc). First ".env.common" is looked for and if found, sourced. Then ".env.<NODE_ENV>" is looked for and sourced if found. The format of these files are compatible with the .env_file format dictated by docker-compose. Blank lines and lines that begin with '#' are tolerated. Example:

# My AWS account
aws.accessKeyId=123456789
aws.secretAccessKey=xxxyyyzzz

# My database creds
database.auth.user=andrew
database.auth.pass=secret

You can then refer to "ENV:aws.accessKeyId" in your config.json.

Readme

Keywords

none

Package Sidebar

Install

npm i env-friendly-config

Weekly Downloads

0

Version

1.0.8

License

ISC

Unpacked Size

7.52 kB

Total Files

5

Last publish

Collaborators

  • aqpeeb