Передача параметров в модули CommonJS в JavaScript

Иногда при вызове модуля необходимо передать в него какие-нибудь данные. Давайте посмотрим, как это делается.

Пусть у нас есть следующий модуль:

function func1() { } function func2() { } exports.func1 = func1; exports.func2 = func2;

Подключим этот модуль к файлу index.js:

let test = require('./test');

Пусть мы хотим передать какие-то данные вовнутрь модуля при его подключении:

let data = 'abcde'; // эти данные хотим передать let test = require('./test');

Не существует специального синтаксиса для передачи данных. Нам нужно самостоятельно написать код, осуществляющий это. Впрочем, это сделать не так сложно.

Для начала исправим код нашего модуля так, чтобы экспортировалась одна функция, содержащая функции нашего модуля:

module.exports = function(data) { function func1() { } function func2() { } return {func1, func2}; }

Эта функции попадет в переменную при подключении модуля:

let data = 'abcde'; let func = require('./test');

И теперь мы можем просто передать наши данные параметром этой функции при ее вызове:

let data = 'abcde'; let func = require('./test'); let test = func(data);

В переменной test будет результат работы функции. В коде функции мы специально возвращаем через return объект с функциями нашего модуля. Получается, что эти функции доступны нам как свойства объекта test:

test.func1(); test.func2();

Не обязательно вводить промежуточную переменную func, можно осуществить вызов функции сразу при подключении модуля:

let data = 'abcde'; let test = require('./test')(data);