Git Product home page Git Product logo

env-var-defaults's Introduction

Env Var Defaults

Build Status Coverage Status

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

env-var-defaults's People

Contributors

makara avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.