Giter Site home page Giter Site logo

config-variables's Introduction

Config Variables CircleCI

Ensures your config variables are accessible via process.env[variable]. Leverages app.json-schema for requirements, descriptions and default values, and a .env file for overwrites in development.

Setup

Install config-variables from NPM

npm install --save config-variables

Either require the package in your entry file

// src/index.js
require('config-variables')

or use node's preload option in your package.json scripts

"scripts": {
  "start": "node -r config-variables src/index.js"
}

If you have an existing .env or app.json file in your projects, your config variables should now be accessible within your code via process.env[variable].

Setting defaults and requirements

If you depend on variables for your app to run, set the requirement in app.json at your project root.

{
  "name": "My Project",
  "env": {
    "API_ENDPOINT": "http://prod.api.io/endpoint",
    "AUTH_KEY": {
      "required": true,
      "description": "Authentication key for OAuth"
    }
  }
}

AUTH_KEY is set as required, so if you run your application it will abort with a message and variable description if you supply one. Handy if multiple people are working on a project.

If you deploy your app to Heroku, you can overwrite these variables in your Heroku dashboard/console.

Development variables

.env is perfect for the variables that you don't want in your .git commits or for development.

PORT=5050
API_ENDPOINT=http://dev.api.io/endpoint
AUTH_KEY=okp3vopq23s2sd3es4j42k

Custom paths

If you have a multiple configs in a monorepo or don't want to store your configs at the root, you can set custom paths with config-variables/lib/setup.

const setup = require('config-variables/setup')
const development = process.env.NODE_ENV !== 'production'

setup({
  appJsonPath: 'src/server/app.json',
  dotEnvPath: development ? '.development' : '.production',
})

config-variables's People

Contributors

simenbrekken avatar

Watchers

 avatar

config-variables's Issues

Combine warn missing variables and verbose output

now it outputs:

    Missing 1 required variable:

    HOSTNAME: Used for url in hot reload server and meta tags

    Use .env file in root directory to set config variables for development


    Config variables:

    HOSTNAME = <not set>
    PORT = <not set>
    FIREBASE_API_KEY = AIzaSyBGI82H0ocU19NS3k9b4PhxqaPWPS2gKlQ
    FIREBASE_URL = https://alpha-corporate.firebaseio.com
    FIREBASE_STORAGE_URL = alpha-corporate.appspot.com

I believe this can be combined into one message, or verbose output is ignored if errors.

- if (verbose) {
+ if (verbose && !hasMissingVariables) {
  reportCurrentConfig(getConfigKeys(appjson, envConfig))
}

Required is default true

Heroku aborts if a variable is not set and required is not set to false. This means required is true by default.

I also believe it aborts when you use required.development which we use.

If these changes are made, this will require a major version bump.

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.