Это не проблема с веб-пакетом, а свойство модулей CommonJS.
Когда сначала требуется модуль CommonJS, его свойство exports
инициализируется пустым объектом за кулисами.
module.exports = {};
Модуль может решить продлить этот exports
собственность или переопределить его.
exports.namedExport = function() { /* ... */ }; // extends
module.exports = { namedExport: function() { /* ... */ } }; // overrides
Так что, когда A
требует B
и B
требует A
сразу после, A
снова не выполняется (который будет производить бесконечный цикл), но его текущее exports
имущество возвращается. Поскольку A
требуется B
в самом верху файла, перед экспортом ничего, вызов require('A')
в модуле B
даст пустой объект.
Общее исправление для круговых зависимостей заключается в том, чтобы поместить ваш импорт в конец файла, после вы экспортировали переменные, необходимые для других модулей.
A
:
module.exports = { foo: 'bar' };
require('B'); // at this point A.exports is not empty anymore
B
:
var A = require('A');
A.foo === 'bar';
я написал инструмент, чтобы проверить проект Webpack для круговых зависимостей: https://github.com/DelvarWorld/webpack-cyclic-dependency- checker –