Browse Source

Initial commit

master
Harish.K 9 years ago
parent
commit
06109151fe
  1. 82
      README.md
  2. 39
      index.js
  3. 24
      package.json

82
README.md

@ -1,3 +1,81 @@
# tconfig
A simple transparent config file loader for Nodejs applications.
any config field can be overriden using environmen variables
A simple and transparent config file loader for Nodejs applications.
## install
```bash
npm i tconfig
```
## Usage
```javascript
const conig = require('tconfig');
console.log( config ); // your config object
```
## Examples
```javascript
// file: xyz.js
/*
▾ app/
▾ config/
default.js // port = 3000
production.js // port = 4000
xyz.js
package.json
*/
console.log( require('tconfig') );
```
#### Simple case
```bash
hari@hari-VirtualBox:~app$ node xyz.js
{ port: 3000 }
```
#### Override using NODE_ENV
values from config/production overides the default one
```bash
hari@hari-VirtualBox:~app$ env NODE_ENV=production node xyz.js
{ port: 5000 }
```
#### Override using Environtment Variables.
Default prefix is `TC_`
TC_port will set config.port
TC_a.b.c will set config.a.b.c
```bash
hari@hari-VirtualBox:~app$ env NODE_ENV=production TC_db.mysql.user=root node xyz.js
{ port: 5000, db: { mysql: { user: 'root' } } }
```
#### Override using Environtment Variables. Custom Prefix
Prefix can be changed using Environtment variable
```bash
export TC_PREFIX=MYAPP_
export MYAPP_PORT=8080
hari@hari-VirtualBox:~app$ env MYAPP_db.mysql.user=root node xyz.js
{ port: 8080, db: { mysql: { user: 'root' } } }
```
#### use custom config directory
config directory can be changed using Environtment variable
```bash
hari@hari-VirtualBox:~app$ env CONFIG_DIR=../config TC_PREFIX=MYAPP_ NODE_ENV=production MYAPP_db.mysql.user=root node xyz.js
{ dir: '../config', db: { mysql: { user: 'root' } } }
```

39
index.js

@ -0,0 +1,39 @@
var path = require('path');
var configDIR = process.env.CONFIG_DIR || path.resolve( path.join( require.main.paths[0], '..', 'config' ) );
var env = ( process.env.NODE_ENV || 'development' ).toLowerCase();
var envPrefix = process.env.TC_PREFIX || 'TC_';
var envRegex = new RegExp( '^' + envPrefix + '(.*)' );
var finalConfig = {};
function loadConfig( name ){
var out = {};
try{
out = require( configDIR + '/' + name );
} catch(e){
out = {};
}
return out;
}
/* Implementation of lodash.set function */
function setProp( object, keys, val ){
keys = Array.isArray( keys )? keys : keys.split('.');
if( keys.length>1 ){
object[keys[0]] = object[keys[0]] || {};
return setProp( object[keys[0]], keys.slice(1), val );
}
object[keys[0]] = val;
}
Object.assign( finalConfig, loadConfig('default'), loadConfig( env ) );
var envList = Object.keys( process.env ).filter( function(v){
var match = v.match( envRegex );
if( match ){
setProp( finalConfig, match[1].toLowerCase(), process.env[v] );
}
});
module.exports = finalConfig;

24
package.json

@ -0,0 +1,24 @@
{
"name": "tconfig",
"version": "0.0.1",
"description": "A simple transparent config file loader for Nodejs applications. any config field can be overriden using environmen variables",
"main": "index.js",
"scripts": {
"test": "mocha -R spec"
},
"repository": {
"type": "git",
"url": "git+https://github.com/harish2704/tconfig.git"
},
"keywords": [
"config",
"env",
"override"
],
"author": "Harish.K <harish2704@gmail.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/harish2704/tconfig/issues"
},
"homepage": "https://github.com/harish2704/tconfig#readme"
}
Loading…
Cancel
Save