Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mrvautin/envz
A dead simple module for storing and managing your environment variables in a simple and easy to read yaml file.
https://github.com/mrvautin/envz
Last synced: 27 days ago
JSON representation
A dead simple module for storing and managing your environment variables in a simple and easy to read yaml file.
- Host: GitHub
- URL: https://github.com/mrvautin/envz
- Owner: mrvautin
- License: mit
- Created: 2021-03-05T10:33:12.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2021-03-15T06:13:20.000Z (over 3 years ago)
- Last Synced: 2024-10-01T19:48:42.120Z (about 1 month ago)
- Language: JavaScript
- Size: 92.8 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# envz
envz is a dead simple module for storing and managing your environment variables in a simple and easy to read yaml file.
```bash
# with npm
npm install envz# or with Yarn
yarn add envz
```## Usage
You should use `envz` as early on in the entry point of your app as possible. Eg: `app.js` or `index.js` file which loads your app.
Rather than override `process.env.x` object, `envz` will return a new object to use throughout your app.
```javascript
const { envz } = require('envz');
```Create a `env.yaml` or any other named file and load it:
```javascript
const env = envz('env.yaml');
```## env YAML file structure
The idea is that the `process.env` will be merged with loaded `yaml` file.
`env` uses a cascading (sequential order) configuration method which is easier to understand looking at an example.
``` yaml
base:
PORT: 1234
config:
default: testdevelopment:
PORT: 3000
DATABASE: dev
config:
token: 12345
secret: fwdsdglproduction:
PORT: 80
DATABASE: prod
config:
token: 67890
key: puwndklf
truthy: true
allowed:
- card
- phone
```The idea here is that the values in `base` are loaded, anything in `development` overrides that and finally `production` overrides that depending on the `NODE_ENV` set.
For example, when a `NODE_ENV` of `development` is set the following `env` object is returned:
```
PORT: 3000,
config: {
default: 'test',
token: 12345,
secret: 'fwdsdgl'
},
DATABASE: 'dev'
...
```Eg: Where the `PORT` of 3000 from `development` overrides the `base` setting of 1234. If the `NODE_ENV` is set to `production`, then the `PORT` will be set to 80.
The idea behind `base` (or whatever you want to call it) is that you don't need to redefine defaults over and over for each environment.
## Options
You can set the environment manually rather than using `NODE_ENV` by adding an `environment` object. Eg:
``` javascript
const env = envz('env.yaml', { environment: 'production' });
```By default the values set in `process.env` overrides what is set in your yaml file. You can change this so that the yaml file is king by adding the following flag:
``` javascript
const env = envz('env.yaml', { yamlFileOverride: true });
```## Save / Update config
Sometimes you may want to store changes back to your `envz` config. You can easily do this by importing `save`:
``` javascript
const { save } = require('envz');
```The `save` method takes an object with two values:
- `envfile`: The yaml file you are wanting to update
- `data`: The object you want to update back to the file. See tests and example below.``` javascript
// In this case we will be adding to the `base` config but you can easily
// replace `base` with `production` or whatever environment.
const saveObj = await save({
envfile: 'test.yaml',
data: {
base: {
config: {
default: 'default-key'
}
}
}
});
```This will result in the `test.yaml` being updated:
``` yaml
base:
PORT: 1234
config:
default: default-key
...
```