Я не понимаю ваших задач-вопросов - зачем нужно куда-то какие-то сведения о выполнении отправлять? Вы можете делать из файла-модуля хоть 100500 разных экспотров. Вот файл, который называется file.js
module.exports = function(bla) {
...
...
...
};
function Bar() {
...
}
exports.Bar = Bar;
exports.foo = function(blabla) {
...
};
Можно запросить его какбэ основную часть, которая есть просто анонимная функция, "function expression" (или "лямбда-функция", я извиняюсь; JavaScript - это же наследник великого Lisp среди си-образных языков). Запросить и сразу вызвать, и с передачей значения аргумента -
require('./file')(tra);
Это по смыслу то же самое, что и вот такой "вызов на месте" (типа - (funcall #'(lambda (bla) (...)) tra) - как-то так)
(function(bla) {
...
})(tra);
А можно обратиться к файлу и вызвать отдельные функции:
require('./file').Bar();
require('./file').foo();
Ну и т.д. Экспортировать можно класс - и тогда запрос может быть созданием экземпляра с передачей параметров в поля конструктора:
new require('./file')(bla, tra);
Всё проще, чем может показаться со стороны. И вот эта вся система "модулей" была скопипастена Райаном Далом, как мне кажется, с системы "пакетов" (package) в CommonLisp. (но там можно экспортировать только имена, как во втором варианте, а он, конечно, усовершенствовал это дело)
Но это вот всё объясняется в стареньком (и хорошем) скринкасте про Node.js аффтара и владельца данного ресурса. Его можно посмотреть.