# env.json

```
npm i --save env.json
```

## What is it
env.json is a package for managing environment variables for node micro services using a json file.

## How it works
The package offers two functions:
- **envSetup** This will parse the env.json file at the root of your project:
  - It will check if the `process.env` contains the provided key, if so continue.
  - If the `process.env` does not contain the said key but a default option is set, then the default value will be set as the env var
  - If no `process.env` is found and no `default` value is found, an error is thrown
- **envGet** This will return the value of an environment variable
  - You can pass the reference key. This is essentially a proxy to the actual name thus enabling you to ref. keys for alternate env. variables or rename as your app grows.
  - You can pass the actual name of the env variable.
  - If neither the env var nor ref is found an error is thrown

## How to use
First create an `env.json` file at the root of your project and ignore it from your git repo (this example demonstrates default values and non-default options):
```
{
  "environment" : {
    "key"     : "APP_ENVIRONMENT",
    "default" : "develop"
  },
  "url"         : {
    "key"     : "APP_URL",
    "default" : "https://github.com/jdcrecur/env.json"
  },
  "port"         : {
    "key"     : "APP_PORT"
  },
  "password"    : {
    "key"     : "BASIC_AUTH_PASSWORD"
  }
}
```

Second import the functions to set the environment variables
```
import {envSetup} from 'env.json'

envSetup()
```

Third use the data in your app
```
import {envGet} from 'env.json'

console.log( 'the app is listening on port: ' envGet('port') )
```

## No default
You might want to only set certain config data into the environment variables and not even in the env.json file.

Simply don't pass the default option.
```
  "password"    : {
    "key"     : "BASIC_AUTH_PASSWORD"
  }
}
```

## Options
By default the package will try to parse in utf8 format a file at the root of your project named `env.json`

You can override this by passing an option:
```
envSetup({ path: './config/env.json', encoding: 'utf16' })
```

(see the unit tests for an example in the repo)

## Suggestions
Welcome, create an issue on github.