Один из приёмов программирования модуля - это вызывающиеся на месте функции. Вот так:
(function(){
// Здесь пишется программный код.
// При этом надо учитывать, что переменные и функции
// доступные здесь имеют ограниченную область видимости
}());
Но сейчас всё больше используется механизм вынесения такого кода в отдельные файлы и подключение их через функцию "require". В аргумент этой функции передаётся название подключаемого файла без ".js" в конце названия. К примеру, вот так выглядит основной файл проекта:
let math = require('./math');
console.log(math.sum(1, 2));
Путь к файлу модуля был указан относительно текущей папки проекта (можно указывать абсолютный). Если в пусти написать просто "math" (без указания текущей папки "./
"), то загрузится родной одноимённый модуль из NodeJS (а не наш самописный). В файле "math.js" находятся необходимые функции:
function sum(num1, num2){
return num1 + num2;
}
function sqare(num){
return num * num;
}
exports.sum = sum; // нет скобок после названия функции!
exports.square = square;
Обратите внимание на последние строчки в этой файле. В них есть "exports". Как было сказано ранее, область видимости переменных и функций в модулях ограничена. Поэтому чтобы пользоваться ими за пределами модуля, необходимо экспортировать их. Как раз это и делают последние строчки с "exports".