Using environment specific configuration files in Node.js

Unlike Rails, there doesn't seem to be an accepted way of loading environment specific config files in Node.js.

Currently I'm using the following:

config/development.js and config/production.js:

module.exports = {
    'db': 'mongodb://127.0.0.1/example_dev',
    'port': 3002
};

Followed by the following at the top of my app.js file:

var config = require('./config/' + process.env.NODE_ENV + '.js');

This pattern works pretty well, however it forces me to pass along this config file to any modules that need it. This gets kind of clunky, for instance:

var routes = require('./routes')(config);

.. and in routes/index.js:

modules.export = function(config) {
    this.index = function...
    this.show = function...
};

Etc, etc. The module pattern just seems to be pretty clunky when dealing with something that should be global, like configuration settings. I could require the configuration file at the top of every file that needs it as well, but that doesn't seem ideal either.

Does anyone have a best practice for including a configuration file and making it globally available?

You could just attach it to the global process object:

app.js:

var config = require('./config/' + process.env.NODE_ENV + '.js');
process.config = config;

aywhere else in your app

console.log(process.config);

Yes, it's a bit dangerous in that it can get overwritten anywhere, but it's still a pretty simple approach.