Configure your Node.js Applications =================================== [![NPM](https://nodei.co/npm/config.svg?downloads=true&downloadRank=true)](https://nodei.co/npm/config/)   [![Build Status](https://secure.travis-ci.org/lorenwest/node-config.svg?branch=master)](https://travis-ci.org/lorenwest/node-config)   [release notes](https://github.com/lorenwest/node-config/blob/master/History.md) Introduction ------------ Node-config organizes hierarchical configurations for your app deployments. It lets you define a set of default parameters, and extend them for different deployment environments (development, qa, staging, production, etc.). Configurations are stored in [configuration files](https://github.com/lorenwest/node-config/wiki/Configuration-Files) within your application, and can be overridden and extended by [environment variables](https://github.com/lorenwest/node-config/wiki/Environment-Variables), [command line parameters](https://github.com/lorenwest/node-config/wiki/Command-Line-Overrides), or [external sources](https://github.com/lorenwest/node-config/wiki/Configuring-from-an-External-Source). This gives your application a consistent configuration interface shared among a [growing list of npm modules](https://www.npmjs.org/browse/depended/config) also using node-config. Project Guidelines ------------------ * *Simple* - Get started fast * *Powerful* - For multi-node enterprise deployment * *Flexible* - Supporting multiple config file formats * *Lightweight* - Small file and memory footprint * *Predictable* - Well tested foundation for module and app developers Quick Start --------------- The following examples are in JSON format, but configurations can be in other [file formats](https://github.com/lorenwest/node-config/wiki/Configuration-Files#file-formats). **Install in your app directory, and edit the default config file.** ```shell $ npm install config $ mkdir config $ vi config/default.json ``` ```js { // Customer module configs "Customer": { "dbConfig": { "host": "localhost", "port": 5984, "dbName": "customers" }, "credit": { "initialLimit": 100, // Set low for development "initialDays": 1 } } } ``` **Edit config overrides for production deployment:** ```shell $ vi config/production.json ``` ```json { "Customer": { "dbConfig": { "host": "prod-db-server" }, "credit": { "initialDays": 30 } } } ``` **Use configs in your code:** ```js var config = require('config'); //... var dbConfig = config.get('Customer.dbConfig'); db.connect(dbConfig, ...); if (config.has('optionalFeature.detail')) { var detail = config.get('optionalFeature.detail'); //... } ``` `config.get()` will throw an exception for undefined keys to help catch typos and missing values. Use `config.has()` to test if a configuration value is defined. **Start your app server:** ```shell $ export NODE_ENV=production $ node my-app.js ``` Running in this configuration, the `port` and `dbName` elements of `dbConfig` will come from the `default.json` file, and the `host` element will come from the `production.json` override file. Articles -------- * [Configuration Files](https://github.com/lorenwest/node-config/wiki/Configuration-Files) * [Special features for JavaScript configuration files](https://github.com/lorenwest/node-config/wiki/Special-features-for-JavaScript-configuration-files) * [Common Usage](https://github.com/lorenwest/node-config/wiki/Common-Usage) * [Environment Variables](https://github.com/lorenwest/node-config/wiki/Environment-Variables) * [Reserved Words](https://github.com/lorenwest/node-config/wiki/Reserved-Words) * [Command Line Overrides](https://github.com/lorenwest/node-config/wiki/Command-Line-Overrides) * [Multiple Node Instances](https://github.com/lorenwest/node-config/wiki/Multiple-Node-Instances) * [Sub-Module Configuration](https://github.com/lorenwest/node-config/wiki/Sub-Module-Configuration) * [Configuring from a DB / External Source](https://github.com/lorenwest/node-config/wiki/Configuring-from-an-External-Source) * [Securing Production Config Files](https://github.com/lorenwest/node-config/wiki/Securing-Production-Config-Files) * [External Configuration Management Tools](https://github.com/lorenwest/node-config/wiki/External-Configuration-Management-Tools) * [Examining Configuration Sources](https://github.com/lorenwest/node-config/wiki/Examining-Configuration-Sources) * [Using Config Utilities](https://github.com/lorenwest/node-config/wiki/Using-Config-Utilities) * [Upgrading from Config 0.x](https://github.com/lorenwest/node-config/wiki/Upgrading-From-Config-0.x) * [Webpack usage](https://github.com/lorenwest/node-config/wiki/Webpack-Usage) Further Information --------------------- If you still don't see what you are looking for, here more resources to check: * The [wiki may have more pages](https://github.com/lorenwest/node-config/wiki) which are not directly linked from here. * Review [questions tagged with node-config](https://stackexchange.com/filters/207096/node-config) on StackExchange. These are monitored by `node-config` contributors. * [Search the issue tracker](https://github.com/lorenwest/node-config/issues). Hundreds of issues have already been discussed and resolved there. Contributors ------------
lorenwest markstos elliotttf jfelege leachiM2k josx
enyo arthanzel eheikes diversario th507 Osterjour
nsabovic ScionOfBytes simon-scherzinger axelhzf benkroeger IvanVergiliev
jaylynch jberrisch kgoerlitz leonardovillela nitzan-shaked robertrossmann
roncli superoven wmertens XadillaX ncuillery patrickpilch
License ------- May be freely distributed under the [MIT license](https://raw.githubusercontent.com/lorenwest/node-config/master/LICENSE). Copyright (c) 2010-2015 Loren West [and other contributors](https://github.com/lorenwest/node-config/graphs/contributors)