env-var-defaults
v0.0.1
Published
Give the env-var module different default values per current NODE_ENV.
Downloads
77
Readme
Env Var Defaults
Give the env-var module different default values per current NODE_ENV. Can be also used independently.
Why
First of all, there's a rule of thumb:
Variables explicitly set in the environment always have final say.
We often use a great module, env-var, to read the environment variables and parse them, and if a variable is missing we can set a default value for it.
Sometimes we want to have environment specific defaults, which shouldn't override the environment variables but shouldn't be overridden by the default value either. This can lead to confusion as which override which and when to set default values etc.
How
// Require.
const { builder, injected } = require('env-var-defaults');
// The injected/augmented env-var.
const env = injected();
// Use it, and give it a list of default values.
const logStream = env.get('LOG_STREAM', ['debug', 'debug', 'syslog', 'syslog']).asString();
The "builder"
The builder
is the base, and can be used independently. When invoked, it can give you a getter function:
const defaults = builder([envList, [envName]]);
envList
is the list of ENV values, default to['test', 'development', 'staging', 'production']
.envName
is default toNODE_ENV
.
Now you can use the function to get a value corresponding to the current ENV.
const value = defaults(['valueA', 'valueB', 'valueC', 'valueD']);
- For example, with the default
envList
, and the ENVdevelopment
, thevalue
will bevalueB
. - Note that the ENV is used at build-time (when you run
builder()
), and not at run-time.
If you give the builder
an env list:
const defaults = builder(['test', 'development', 'integration', 'staging', 'production']);
Then you must give the defaults
a list of default values matches to it:
const value = defaults(['valueA', 'valueB', 'valueC', 'valueD', 'valueE']);
- For example, with the ENV
integration
, thevalue
will bevalueC
.
The "injected"
The injected
can give you an augmented env-var
:
const env = injected([envList, [envName]]);
- It accepts the same arguments with
builder
. - It returns what
env-var
would give you with just theget()
function augmented.
And you use it like the initial example:
const logStream = env.get('LOG_STREAM', ['debug', 'debug', 'syslog', 'syslog']).asString();
You can also use it in the original way, if you have just one default value:
const logStream = env.get('LOG_STREAM', 'debug').asString();