Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Small library for managing your environment variables
JavaScript
tree: 4f446a30b0

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
test
.gitignore
.travis.yml
LICENSE
README.md
index.js
package.json

README.md

habitat Build Status

Library for managing your environment vars.

Why

According to factor 3, you should be storing your configuration as environment variables. Writing process.env everywhere can be real annoying, so this abstracts away of that manipulation. It also provides some nice little nicities for testing.

Installation

Why NPM of course!

$ npm install habitat

Usage

new habitat([prefix, [defaults]])

Creates a new environment manipulator.

prefix is the prefix for your environment variables. For example, if your app is called airsupport, it's probably good to namespace your environment variables like so:

export AIRSUPPORT_HOST=lolcathost
export AIRSUPPORT_PORT=3000
export AIRSUPPORT_WEBSOCKETS=true

In this case, your prefix will be 'airsupport' -- the prefix will be auto-capitalized because only barbarians use lowercase letters in their environment variables.

Note that you don't have to pass in a prefix, if you're crazy like that. Keys will be looked up (after capitalization) straight from the env:

var env = new habitat;
var path= env.get('path'); 

defaults is an object representing the defaults if a key cannot be found in the environment. This should be used sparingly.

var env = new habitat('airsupport', { port: 3000 })
// will try the environment first, then fall back to 3000
var port = env.get('port');

habitat#get(key, [default])

Gets a key from the environment. Automatically prefixes with the prefix passed to the constructor, if necessary.

habitat#get will also try to do some parsing of the value if it looks like a boolean, number or json, so you can do things like this:

exports APP_ADMINS='["me@example.com", "you@example.com"]'
var env = new habitat('app');
var admins = env.get('admins');
console.log(admins.indexOf('you@example.com')) // 1

If a default is passed, if the key is undefined in either the env or the constructor-set defaults, it will fall back to that.

You can also do stuff like this:

exports APP_DB="redis"
exports APP_REDIS_HOST="127.0.0.1"
exports APP_REDIS_PORT=6379
var env = new habitat('app');
var db = env.get('db');
var options = env.get('redis');
console.log(db); // "redis"
console.log(options.host); // "127.0.0.1"
console.log(options.port); // 6379

habitat#set(key, value)

Sets an environment variable, with prefix if passed.

habitat#unset(key)

Unsets an environment variable

habitat#all()

Get an object with all of the things in the environment.

Example:

export APP_HOST='localhost'
export APP_PORT=3000
export APP_PROTO=http
var env = new habitat('app');
var obj = env.all();

console.log(obj.host); // 'localhost'

habitat#temp(object, callback)

Temporarily overrides environment variables with values from object.

callback can be syncronous if defined without any parameters, or async if defined with a single parameter.

Example:

var env = new habitat('airsupport', {
  protocol: 'http',
  host: 'airsupport.io',
  port: 3000
});

var tempEnv = {
  host: 'lolcathost'
  port: 5000
};

// sync  
env.temp(tempEnv, function() {
  console.log(env.get('host')) // "lolcathost"
  console.log(process.env['AIRSUPPORT_HOST']) // "lolcathost"
})

console.log(env.get('host')) // "airsupport.io"

// async
env.temp(tempEnv, function(done)
  process.nextTick(function(){
    console.log(env.get('port')) // 5000
    done();
  });
})

License

MIT

Something went wrong with that request. Please try again.