Ваша проблема в круговых зависимостях: First
зависит от Second
и Second
в зависимости от First
.
Это связано с циклом зависимости, и мы присваиваем module.exports
новому объекту в конце файла.
Из-за цикла объект module.exports
передается в Second
в первой строке First
, это пустой объект.
После этого First
переназначает значение module.exports
функции, но объект уже передан Second
, поэтому вы получаете ошибку.
Чтобы решить эту проблему, устраните круговую зависимость, если можете. Циркулярные зависимости сбивают с толку и, как правило, являются признаком тесно связанного кода, было бы лучше модулировать ваши функции таким образом, чтобы общие зависимости извлекались в их собственные модули.
Если вы не можете устранить циклические зависимости, вам нужно будет избегать переназначения module.exports
.
First.js:
var Second = require('./Second.js');
module.exports.first = () => {
console.log('FIRST')
};
Second.js
var First = require('./First.js');
module.exports = () => {
First.first();
};