4.0.3 • Public • Published

xtralive-env is the assembly line

xtralive-env is a module aimed at handling configuration and dependency injection.

How to configure

Add it to your package.json

dependencies: {

You can then use xlenv = require "xtralife-env"

You can add configuration data to xlenv easily with overrides. To load a configuration file, use overrideWith.

xlenv.overrideWith 'file.coffee'

Configuration files are simply modules or js files:

module.exports =
	loglevel: 'warn'
		port: 80
		bind_ip: ''

You can load more files, and each file will override existing settings.

You can also override xlenv with override :

xlenv.override 'server', {port:8080, bind_ip: ''}

If you want to override at the root level, use null as the "mount point"

xlenv.override null, {loglevel: 'info'}

But you can override at any depth, and the root needs not exist already :

xlenv.override 'config.server', {port:8080, bind_ip: ''}

How to use synchronously

To get configuration data from xlenv, you can simply dereference it

console.log xlenv.loglevel
console.log xlenv.server.port

Asynchronous use

xlenv configuration files can also contain async functions. Let's see an example (file counter-conf.coffee) : The following example is just that, an example. It's not the best use case one can think of !

total_requests = 0

module.exports =
	requests: (cb)->
		cb(null, total_requests++)

Now if I include this configuration in xlenv,

xlenv.override 'counters', require('counter-conf.coffee')

I can ask xlenv for an asynchronous dependency injection :

xlenv.inject ["counters.requests"], (err, counter)->

Each time this code is executed, the counter will be incremented for me.

This kind of initialization can be very handy when an asynchronous callback is required to get a value. Let's modify our counter to use Redis to store its value !

redis = require('redis').createClient()

module.exports =
	requests: (cb)->
		redis.incr 'requests', cb

Now each time I inject "counters.request", a request will be made to Redis to increment the counter.

But if try to use xlenv.counters.requests, the function will be returned, not the counter...

Finally, inject can be used for singletons too, if the property name is prefixed with =:

xlenv.inject ["=redis"], (err, redis)-> # the same redis instance will be injected each time, not a new one
    # now use redis...

    xlenv.inject ["redis"], (err, anotherRedis)->
        # anotherRedis is != redis, it's a new one

Default Logs

To inherit of the default log configuration just invoke :

xlenv.override null, xlenv.Log

then to retreive the actual logger do:

xlenv.Logger xlenv.logs, (err, logger)->
	xlenv.log = logger	


npm i xtralife-env

DownloadsWeekly Downloads





(C) Xtralife.cloud, 2015

Unpacked Size

20.4 kB

Total Files


Last publish


  • xtralife