miconfig
v1.1.6
Published
Configuration loader for Node.js, browsers & Deno.
Downloads
70
Maintainers
Readme
miconfig — Configuration loader for Node.js, browsers & Deno.
Features
- Easy: Designed for situations where a PhD into load configurations is infeasible.
- Lightweight: no bloat, less than 1KB with all dependencies.
- Isomorphic: Compatible with Node.js, browsers & Deno.
- Flexible: Super easy load any kind of configuration.
- Simple: The whole module is ~50 lines of code.
Install
$ npm install miconfig --save
Usage
In miconfig, a configuration is identified by environment name.
Load Configuration Files
Place the configuration files wherever you desire, e.g., in a folder called config
:
.
├── index.js
└── config
├── default.js
├── production.js
├── staging.js
└── test.js
Then, load them using miconfig:
const loadConfig = require('miconfig')
const FILES = [
'default',
NODE_ENV === 'development' ? undefined : NODE_ENV
].filter(Boolean)
const environment = FILES.reduce((acc, key) => {
acc[key] = require(`./config/${key}`)
return acc
}, {})
const config = loadConfig(environment)
In case you want to use a different file format (like YAML), you've to parser them before be loaded:
const environment = FILES.reduce((acc, key) => {
acc[key] = fromYaml(`./config/${key}.yml`)
return acc
}, {})
The default
configuration is always loaded and merged with the target configuration environment.
miconfig uses process.env.NODE_ENV
to determine what configuration should be loaded.
In case you want to use a different source of truth, you can pass it as second argument:
const loadConfig = require('miconfig')
const config = loadConfig(
{
default: require('./config/default'),
production: require('./config/default')
},
process.env.APP_ENV
)
Accessing to configuration
After miconfig loads your configuration, you can safely access to any value.
Safe access
// read a value, don't care if it's empty
const database = config.get('database.url')
Safe access + default value
// read a value, use a default if empty
const database = config.get('database.url', 'localhost')
Require access
// read a value, throw an error if it doesn't exist
const database = config.require('database.url')
Typecheck access
// check if a value exists
if (config.has('feature.prerender')) {
console.log('prerender is enabled')
}
Additionally, you can retrieve more than one value at one time with destructuring assignment:
Destructuring safe access
// read multiple values, don't care if it's empty
const { timezone, database } = config
Destructuring require access
// read multiple values, throw an error if one of them doesn't exist
const { timezone, database } = config.required
License
miconfig © Kiko Beats, released under the MIT License. Logo by Absurd Design.
Authored and maintained by Kiko Beats with help from contributors.
kikobeats.com · GitHub Kiko Beats · Twitter @Kikobeats