Give the env-var module different default values per current NODE_ENV.

Downloads in past


0.0.15 years ago5 years agoMinified + gzip package size for env-var-defaults in KB


Env Var Defaults
Build Status Coverage Status
Give the env-var module different default values per current NODEENV. Can be also used independently.


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.


// 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 to NODE_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 ENV development, the value will be valueB.
  • 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, the value will be valueC.

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 the get() 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();