How do you share constants in NodeJS modules?


Currently I'm doing this:


const FOO = 5;

module.exports = {
    FOO: FOO

And using it in bar.js:

var foo = require('foo');
foo.FOO; // 5

Is there a better way to do this? It feels awkward to declare the constant in the exports object.

12/21/2011 7:54:22 PM

Accepted Answer

You can explicitly export it to the global scope with global.FOO = 5. Then you simply need to require the file, and not even save your return value.

But really, you shouldn't do that. Keeping things properly encapsulated is a good thing. You have the right idea already, so keep doing what you're doing.

10/1/2015 11:07:45 PM

In my opinion, utilizing Object.freeze allows for a DRYer and more declarative style. My preferred pattern is:


module.exports = Object.freeze({
    MY_CONSTANT: 'some value',
    ANOTHER_CONSTANT: 'another value'


var constants = require('./constants');

console.log(constants.MY_CONSTANT); // 'some value'

constants.MY_CONSTANT = 'some other value';

console.log(constants.MY_CONSTANT); // 'some value'

Outdated Performance Warning

The following issue was fixed in v8 in Jan 2014 and is no longer relevant to most developers:

Be aware that both setting writable to false and using Object.freeze have a massive performance penalty in v8 - and

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow