node-no-config

Config and resource loader

Github stars Tracking Chart

NPM version
Build Status
Test Coverage
Dependency Status
Dependency Status
Intro, Quick start, Quick start (ES6), API, Contributors

Intro

Why not config?

Answer. TL;DR: config separates data to different files based on NODE_ENV, not resources.

$ npm install no-config

Quick start

// config.js
module.exports = {
	redis: {
		init: function (params) {
			return require('redis').createClient(params)
		},
		default: {
			db: 0,
			port: 6379
		},
		development: {
			host: '127.0.0.1'
		},
		production: {
			db: 1,
			host: '192.168.0.10'
		}
	}
}
// index.js
require('no-config')({
	config: require('./config')
}).then(
	function(conf) {
		console.log('ENV', conf.env)
		console.log('Redis:', conf.redis.host+':'+conf.redis.port)
		conf.redis.instance.set('hello', 'world')
	}
)
$ NODE_ENV=development node index.js
ENV development
Redis: 127.0.0.1:6379

Quick start (ES6)

Since no-config returns a promise it is much better to use ES6 generators, arrow functions and co.
If you are not familiar with co, check this step-by-step tutorial

// config.js
module.exports = {
	redis: {
		init: params => require('redis').createClient(params),
		default: {
			db: 0,
			port: 6379
		},
		development: {
			host: '127.0.0.1'
		},
		production: {
			db: 1,
			host: '192.168.0.10'
		}
	}
}
// index.js
'use strict'
const co = require('co')
co(function* () {
	let config = require('./config')
	let conf = yield require('no-config')({config})

	console.log('ENV', conf.env)
	console.log('Redis:', conf.redis.host+':'+conf.redis.port)
	conf.redis.instance.set('hello', 'world')
})

API

Loader

require('no-config')(parameters)

Loads resources from parameters.config based on NODE_ENV environment variable. Returns a Promise which resolves ones all resources are initialized.

Parameters, Name, Required?, Type, Default, Description, --------------, ---------, ---------------, -------------, --------------------------------------------------------, config, Required, Object, Configuration object, init, Optional, List of strings, All Resources, Resources to initialize, verbose, Optional, Boolean, false, Print resource input prior to call its init() function, mask_secrets, Optional, Boolean, true, if verbose === true will hide input value if its key contains substrings: secret, token, key, pass or pwd, ### Configuration object
Every high-level key in configuration object is a resource name., Name, Required?, Type, Default, Description. Handling, -------------------, ---------, ----------, ------------------, ---------------------------------------------------, <RESOURCE>, Optional, Object, Resource configuration, <RESOURCE>.default, Optional, Object, {}, Default values, <RESOURCE>.<ENV>, Optional, Object, {}, ENV specific values. If a key duplicates default key, env-specific value is used, <RESOURCE>.init, Optional, Function, Generator function, Called to initalize resource, <RESOURCE>.init(result). If returns Promise or Generator, it got resolved with co. Result is saved to result.instance., ## Contributors
Fedor Korshunov - view contributions
Anurag Sharma - view contributions

Main metrics

Overview
Name With Ownerfedor/node-no-config
Primary LanguageJavaScript
Program languageJavaScript (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2016-09-12 16:20:33
Pushed At2018-02-27 01:59:55
Last Commit At2018-02-27 09:59:54
Release Count0
用户参与
Stargazers Count47
Watchers Count1
Fork Count5
Commits Count40
Has Issues Enabled
Issues Count2
Issue Open Count0
Pull Requests Count2
Pull Requests Open Count0
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private