Enforce env vars for 12-factor apps in dev or prod
npm install strict-env

[![Build status][build-badge]][build-link]
[![Coverage status][coverage-badge]][coverage-link]
1. Create .env following [dotenv][dotenv-link] formatting. Make
sure to add it to your .gitignore file. Recommended to commit
dummy values in a file example.env as well.
2. npm i -E strict-env
3. In config.js (or similar):
``js
const env = require('strict-env');
/*
* The config function expects a mapping of required environmentJSON.parse
* variables names to transformer functions. The library provides
* transformers for common use cases, but you can easily provide
* your own.
*/
module.exports = env.config({
BOOLEAN: env.boolean, // Allows values: 'true', 'false', '1', '0'
INTEGER: env.integer,
JSON: env.json, // Any valid input for
NUMBER: env.number,
PORT: env.port,
STRING: env.string, // Non-empty string
/*
* Custom transformers must either return the transformed value
* or throw an error. They are invoked with two parameters:
* value - String value of environment variable, or undefinedEnv. var. should be a non-negative integer: "${name}"
* if not set. (This allows you to specify variables that
* are optional or have default values.)
* name - String name of the target environment variable. You
* sholud use this to generate nice error messages.
*/
CUSTOM: (value, name) => {
if (/\d+/.test(value)) {
return Number(value);
} else {
const message =
;
throw new Error(message);
}
},
});
// You can also use the get function to process single variables.`
// This is useful for ES modules!
export const PORT = env.get('PORT', env.port);`
4. Use config values in other files:js
const config = require('./config');
console.info(config.CUSTOM); // Will be be a non-negative integer
console.info(config.PORT); // Will be be a valid port number
console.info(config.STRING); // Will be be a non-empty string
// Etc.
// Or use ES modules
import { PORT } from './config';
``
[build-badge]: https://travis-ci.org/AndyBarron/strict-env.svg?branch=master
[build-link]: https://travis-ci.org/AndyBarron/strict-env
[coverage-badge]: https://coveralls.io/repos/github/AndyBarron/strict-env/badge.svg?branch=master
[coverage-link]: https://coveralls.io/github/AndyBarron/strict-env?branch=master
[dotenv-link]: https://github.com/motdotla/dotenv