mirror of
https://github.com/harish2704/tconfig.git
synced 2026-09-10 15:11:08 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
23b899df60 | ||
|
|
38fd5d04aa | ||
|
|
c8aae33840 | ||
|
|
106a9d7cbb | ||
|
|
ea1f06b940 |
@@ -0,0 +1 @@
|
||||
example
|
||||
@@ -38,37 +38,42 @@ hari@hari-VirtualBox:~app$ node xyz.js
|
||||
|
||||
```
|
||||
|
||||
#### Override using NODE_ENV
|
||||
values from config/production overides the default one
|
||||
#### Read additional config based on NODE_ENV variable.
|
||||
If we specify NODE_ENV=xyz then, config/xyz.js will overide the values from default.js. **Overriding is a deep merge**
|
||||
|
||||
```bash
|
||||
hari@hari-VirtualBox:~app$ env NODE_ENV=production node xyz.js
|
||||
{ port: 5000 }
|
||||
{ port: 4000 }
|
||||
```
|
||||
|
||||
#### Override using Environtment Variables.
|
||||
#### Set any configuration variable using Environtment variable.
|
||||
By setting an Environtment variable '<Prefix><key>=<value>', we can set config[key] as value.
|
||||
Default prefix is `TC_`
|
||||
For eg:
|
||||
|
||||
TC_port will set config.port
|
||||
* `TC_port` will set config.port
|
||||
|
||||
* `TC_a.b.c` will set config.a.b.c
|
||||
|
||||
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' } } }
|
||||
{ port: 4000, db: { mysql: { user: 'root' } } }
|
||||
```
|
||||
|
||||
#### Override using Environtment Variables. Custom Prefix
|
||||
Prefix can be changed using Environtment variable
|
||||
##### Use custom env prefix.
|
||||
|
||||
default prefix can be changed using Environtment variable by setting `TC_PREFIX` Environtment variable
|
||||
|
||||
```bash
|
||||
export TC_PREFIX=MYAPP_
|
||||
export MYAPP_PORT=8080
|
||||
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
|
||||
config directory can be changed using Environtment variable by setting `CONFIG_DIR` 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' } } }
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
{
|
||||
"port":3000
|
||||
"port":3000,
|
||||
"pool":{
|
||||
"min":2,
|
||||
"max":10
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
|
||||
console.log( require('tconfig'));
|
||||
console.log( require('../../'));
|
||||
|
||||
@@ -1,21 +1,64 @@
|
||||
|
||||
var path = require('path');
|
||||
var configDIR = process.env.CONFIG_DIR || path.resolve( path.join( require.main.paths[0], '..', 'config' ) );
|
||||
var fs = require('fs');
|
||||
var configDir;
|
||||
var env = ( process.env.NODE_ENV || 'development' ).toLowerCase();
|
||||
var envPrefix = process.env.TC_PREFIX || 'TC_';
|
||||
var envRegex = new RegExp( '^' + envPrefix + '(.*)' );
|
||||
var finalConfig = {};
|
||||
var configDirLookupPath = [
|
||||
path.resolve( path.join( require.main.paths[0], '..', 'config' ) ),
|
||||
path.join( process.env.PWD, 'config' )
|
||||
];
|
||||
if( process.env.CONFIG_DIR ){
|
||||
configDirLookupPath.unshift( process.env.CONFIG_DIR );
|
||||
}
|
||||
|
||||
for (var i = 0, l = configDirLookupPath.length; i < l; i ++) {
|
||||
var v = configDirLookupPath[i];
|
||||
if( fs.existsSync(v) ){
|
||||
configDir = v;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( !configDir ){
|
||||
throw Error(
|
||||
'Config directory not found.\n Look up at following locations failed.\n---\n** ' +
|
||||
configDirLookupPath.join('\n** ') + '\n---\n' +
|
||||
'\n Please set CONFIG_DIR env variable');
|
||||
}
|
||||
|
||||
|
||||
|
||||
function loadConfig( name ){
|
||||
var out = {};
|
||||
try{
|
||||
out = require( configDIR + '/' + name );
|
||||
out = require( configDir + '/' + name );
|
||||
} catch(e){
|
||||
out = {};
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function assignDeep( src, dest1, dest2 ){
|
||||
var key, val;
|
||||
for( key in dest1 ){
|
||||
val = dest1[ key ];
|
||||
if( val.constructor.name === 'Object' ){
|
||||
if( ( !src.hasOwnProperty(key) ) || ( src[ key ].constructor.name !== 'Object' ) ){
|
||||
src[ key ] = {};
|
||||
}
|
||||
assignDeep( src[ key ], val );
|
||||
} else {
|
||||
src[ key ] = val;
|
||||
}
|
||||
}
|
||||
if( dest2 ){
|
||||
assignDeep( src, dest2 );
|
||||
}
|
||||
return src;
|
||||
}
|
||||
|
||||
/* Implementation of lodash.set function */
|
||||
function setProp( object, keys, val ){
|
||||
keys = Array.isArray( keys )? keys : keys.split('.');
|
||||
@@ -26,12 +69,12 @@ function setProp( object, keys, val ){
|
||||
object[keys[0]] = val;
|
||||
}
|
||||
|
||||
Object.assign( finalConfig, loadConfig('default'), loadConfig( env ) );
|
||||
assignDeep( finalConfig, loadConfig('default'), loadConfig( env ) );
|
||||
|
||||
var envList = Object.keys( process.env ).filter( function(v){
|
||||
Object.keys( process.env ).filter( function(v){
|
||||
var match = v.match( envRegex );
|
||||
if( match ){
|
||||
setProp( finalConfig, match[1].toLowerCase(), process.env[v] );
|
||||
setProp( finalConfig, match[1], process.env[v] );
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
+4
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tconfig",
|
||||
"version": "0.0.1",
|
||||
"version": "0.1.3",
|
||||
"description": "A simple transparent config file loader for Nodejs applications. any config field can be overriden using environmen variables",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
@@ -20,5 +20,7 @@
|
||||
"bugs": {
|
||||
"url": "https://github.com/harish2704/tconfig/issues"
|
||||
},
|
||||
"homepage": "https://github.com/harish2704/tconfig#readme"
|
||||
"homepage": "https://github.com/harish2704/tconfig#readme",
|
||||
"dependencies": {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user