Вроде, все просто и ясно:
Что бы экспортировать что-то в самом модуле нужно прописать:
Почему не всегда работает?
Ответ на этот вопрос лежит в понимании работы функции require().
var module = require("./some_module.js");
module.f(); // запуск экспортируемой функции модуля
console.log(module.obj); // печать экспортируемого объекта модуля
module(); // запуск самого модуля
Что бы экспортировать что-то в самом модуле нужно прописать:
exports.f = function() { return 123; };
exports.obj = { name: "Foobar", age: 33 };
// или даже так, что вместе с предыдущими строчками
// в одном модуле не сработает!
module.exports = function() { return "I have not a name"; }
Почему не всегда работает?
Ответ на этот вопрос лежит в понимании работы функции require().