All Projects → fedor → Node No Config

fedor / Node No Config

Licence: mit
Config and resource loader

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Node No Config

sitri
Sitri - powerful settings & configs for python
Stars: ✭ 20 (-55.56%)
Mutual labels:  config, configuration, configuration-management
Koanf
Light weight, extensible configuration management library for Go. Built in support for JSON, TOML, YAML, env, command line, file, S3 etc. Alternative to viper.
Stars: ✭ 450 (+900%)
Mutual labels:  config, configuration-management, configuration
libconfini
Yet another INI parser
Stars: ✭ 106 (+135.56%)
Mutual labels:  config, configuration, configuration-management
Config
Easiest way to add multi-environment yaml settings to Rails, Sinatra, Pandrino and other Ruby projects.
Stars: ✭ 1,821 (+3946.67%)
Mutual labels:  config, configuration-management, configuration
Config Rs
⚙️ Layered configuration system for Rust applications (with strong support for 12-factor applications).
Stars: ✭ 915 (+1933.33%)
Mutual labels:  config, configuration-management, configuration
Simple Settings
A simple way to manage your project settings.
Stars: ✭ 165 (+266.67%)
Mutual labels:  config, configuration-management, configuration
Ini Parser
Read/Write an INI file the easy way!
Stars: ✭ 643 (+1328.89%)
Mutual labels:  config, configuration-management, configuration
superconfig
Access environment variables. Also includes presence validation, type coercion and default values.
Stars: ✭ 33 (-26.67%)
Mutual labels:  config, configuration, configuration-management
Strictyaml
Type-safe YAML parser and validator.
Stars: ✭ 836 (+1757.78%)
Mutual labels:  config, configuration-management, configuration
parse it
A python library for parsing multiple types of config files, envvars & command line arguments that takes the headache out of setting app configurations.
Stars: ✭ 86 (+91.11%)
Mutual labels:  config, configuration, configuration-management
Node Convict
Featureful configuration management library for Node.js
Stars: ✭ 1,855 (+4022.22%)
Mutual labels:  config, configuration-management, configuration
nest-typed-config
Intuitive, type-safe configuration module for Nest framework ✨
Stars: ✭ 47 (+4.44%)
Mutual labels:  config, configuration, configuration-management
Appconfiguration
Questions, feedback and samples for Azure App Configuration service
Stars: ✭ 116 (+157.78%)
Mutual labels:  config, configuration-management, configuration
Configuration
Library for setting values to structs' fields from env, flags, files or default tag
Stars: ✭ 37 (-17.78%)
Mutual labels:  config, configuration-management, configuration
Dynaconf
Configuration Management for Python ⚙
Stars: ✭ 2,082 (+4526.67%)
Mutual labels:  config, configuration-management, configuration
climatecontrol
Python library for loading settings and config data from files and environment variables
Stars: ✭ 20 (-55.56%)
Mutual labels:  config, configuration, configuration-management
dotfiles
My personal app/env configs and dotfiles.
Stars: ✭ 27 (-40%)
Mutual labels:  config, configuration, configuration-management
Centraldogma
Highly-available version-controlled service configuration repository based on Git, ZooKeeper and HTTP/2
Stars: ✭ 378 (+740%)
Mutual labels:  config, configuration-management, configuration
Go Config
A dynamic config framework
Stars: ✭ 595 (+1222.22%)
Mutual labels:  config, configuration
Jsonnet
Jsonnet - The data templating language
Stars: ✭ 5,257 (+11582.22%)
Mutual labels:  config, configuration

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].