@southpole/require-env
v1.0.0
Published
Loads environment variables and fails fast if they don't exist.
Downloads
272
Readme
@southpole/require-env
This plugin allows you to safely read environment variables from process.env in Node.js. It was built to provide an extra layer of safety as this plugin will throw an error when an environment variable is undefined
. You also have the option to provide a default value in case your environment variable cannot be found.
Features
- Convenient. You can specify default values to avoid
undefined
values. - Reliable. Fails fast if an environment variable is not configured.
- Typed. Source code is 100% TypeScript.
- Tested. Code coverage is 100%.
Use Cases
Imagine this is your code:
const variable = process.env.NODE_ENV === 'production' ? 'something-cool' : 'something-strange';
if (variable) {
console.log(`My code will do something strange now and I won't notice it...`);
}
In case you forget to set process.env.NODE_ENV
in your environment, your variable will be set to something-strange
. You won't even notice in local development that your variable is unset, because the if
-condition is still met. That's where requireEnv
comes into play.
With requireEnv
your code will fail already in local development when you haven't configured the NODE_ENV
environment variable:
import {requireEnv} from '@southpole/require-env';
const variable = requireEnv('NODE_ENV') === 'production' ? 'something-cool' : 'something-strange';
if (variable) {
console.log(`My code won't reach this line because it will fail early to avoid something strange happening.`);
}
Using requireEnv
instead of directly accessing process.env
will make your system stop early rather than attempting to continue a flawed state (see fail-fast systems design).
If you prefer, you can also provide meaningful default values:
import {requireEnv} from '@southpole/require-env';
const variable = requireEnv('NODE_ENV', 'development');
if (variable) {
console.log('My app will still work as there is a default value.');
}
Recommendation
- Replace all accesses to
process.env
withrequireEnv
in your code - Avoid using defaults to make sure your config is set up properly
- Activate the
node/no-process-env
rule using eslint-plugin-node