这不是webpack问题,而是CommonJS模块的属性。
首次需要CommonJS模块时,其
exports属性将初始化为幕后的空对象。
module.exports = {};然后,模块可以决定扩展此
exports属性或覆盖它。
exports.namedExport = function() { }; // extendsmodule.exports = { namedExport: function() { } }; // overrides因此,当
Arequire
B和
Brequire
A紧随其后时,
A不会再次执行(这将产生无限循环),但是将
exports返回其当前属性。由于在文件的最顶部是
A必需的
B,因此在导出任何内容之前,模块中的
require('A')调用B将产生一个空对象。
循环依赖项的一个常见修复方法是, 在 导出其他模块所需的变量 之后 ,将导入内容放在文件的末尾。
A:
module.exports = { foo: 'bar' };require('B'); // at this point A.exports is not empty anymoreB:
var A = require('A');A.foo === 'bar';


