strict-env

Enforce env vars for 12-factor apps in dev or prod

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
strict-env
211.1.05 years ago5 years agoMinified + gzip package size for strict-env in KB

Readme

strict-env
Enforce 12-factor app environment variables in development or production
NPM version NPM downloads !Build statusbuild-badgebuild-link !Coverage statuscoverage-badgecoverage-link

Recommended usage

  1. Create .env following dotenvdotenv-link formatting. Make
sure to add it to your `.gitignore` file. Recommended to commit
dummy values in a file `example.env` as well.
  1. npm i -E strict-env
  2. In config.js (or similar):
const env = require('strict-env');

/*
 * The `config` function expects a mapping of required environment
 * variables names to transformer functions. The library provides
 * transformers for common use cases, but you can easily provide
 * your own.
 */
module.exports = env.config({
  BOOLEAN: env.boolean, // Allows values: 'true', 'false', '1', '0'
  INTEGER: env.integer,
  JSON: env.json,       // Any valid input for `JSON.parse`
  NUMBER: env.number,
  PORT: env.port,
  STRING: env.string,   // Non-empty string

  /*
   * Custom transformers must either return the transformed value
   * or throw an error. They are invoked with two parameters:
   * value - String value of environment variable, or `undefined`
   *         if not set. (This allows you to specify variables that
   *         are optional or have default values.)
   * name - String name of the target environment variable. You
   *        sholud use this to generate nice error messages.
   */
  CUSTOM: (value, name) => {
    if (/\d+/.test(value)) {
      return Number(value);
    } else {
      const message =
        `Env. var. should be a non-negative integer: "${name}"`;
      throw new Error(message);
    }
  },
});

// You can also use the `get` function to process single variables.
// This is useful for ES modules!
export const PORT = env.get('PORT', env.port);
  1. Use config values in other files:
const config = require('./config');

console.info(config.CUSTOM); // Will be be a non-negative integer
console.info(config.PORT);   // Will be be a valid port number
console.info(config.STRING); // Will be be a non-empty string
// Etc.

// Or use ES modules
import { PORT } from './config';

Compatibility

This library should work with node versions as old as 0.10, thanks to Rollup and Babel. (Please file an issue if that is not the case!)