env-var-defaults
v0.0.1
Published
Give the env-var module different default values per current NODE_ENV.
Downloads
81
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]]);envListis the list of ENV values, default to['test', 'development', 'staging', 'production'].envNameis 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, thevaluewill 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, thevaluewill 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-varwould 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();