Skip to content
This repository was archived by the owner on Nov 21, 2023. It is now read-only.
/ config Public archive

Simple environment-specific configuration

License

Notifications You must be signed in to change notification settings

hello-js/config

Folders and files

NameName
Last commit message
Last commit date

Latest commit

159e538 · Apr 4, 2019

History

24 Commits
Apr 4, 2019
Feb 18, 2019
Feb 18, 2019
Feb 18, 2019
Feb 18, 2019
Feb 18, 2019
Feb 18, 2019
Apr 4, 2019
Feb 18, 2019
Apr 4, 2019
Feb 18, 2019
Feb 18, 2019
Feb 18, 2019

Repository files navigation

@hello/config

Simple environment-specific configuration for your node apps

[Build Status](https://travis-ci.org/hello-js/ config) Coverage Status

Installation

yarn add @hello/config

Usage

@hello/config loads environment-specific config files from a directory.

Setup

The easiest way to get set up is running the following from your command line

yarn @hello/config

This will create a config directory that is ready to be required anywhere in your app (const config = require('./config');)

Manual Setup

You can also set up @hello/config manually.

/**
 * config/index.js
 */

const Config = require('@hello/config').default

module.exports = Config.load()
// Or as typescript:
import { load } from '@hello/config'

export default load()

The above code will load config/default.js and merge in contents from config/development.js as overrides.

If there is a config/development.local.js file, this will be merged in as well. You can have a .local.js file for any environment.

You can also set local environment variables using a .env file the root of your project if you'd like.

NOTE: *.local.js and .env should be added to .gitignore -- it should only be used for developer-specific settings

Recommended directory structure

The recommended directory structure is

./config/
  default.js
  development.js
  index.js
  production.js
  test.js

Sample config/index.js file:

const Config = require('@hello/config').default

module.exports = Config.load()

Sample default.js file:

module.exports = {
  port: process.env.PORT || 80,

  db: {
    host: process.env.DATABASE_HOST,
    username: 'matt'
    // ...
  }
}

Sample development.js file:

module.exports = {
  port: 3000,

  db: {
    host: '127.0.0.1'
  }
}

At this point, you can run the following code:

config config = require('./config');

config.port;
// => 3000

config.get('port');
// => 3000

config.db.host;
// => '127.0.0.1'

config.get'db.host');
// => '127.0.0.1'

config.does.not.exist;
// => TypeError: Cannot read property 'not' of undefined

config.get('does.not.exist');
// => undefined

Custom directory structure

You can use any directory structure you prefer. For example, to have a structure like the following:

config/
  index.js
  environments/
    all.js
    development.js
    production.js
    test.js

You can use the following options for Config.load():

const path = require('path')
const Config = require('@hello/config').default

module.exports = Config.load({
  root: path.join(__dirname, 'environments'),
  baseFilename: 'all'
})

By default, @hello/config uses process.env.NODE_ENV as the environment, however, if you'd like, you can directly load an environment's configuration:

// Loads the test environment:
Config.load({
  env: 'test'
})

About

Simple environment-specific configuration

Resources

License

Stars

Watchers

Forks

Packages

No packages published