Đây không phải là vấn đề về webpack mà là tài sản của mô-đun CommonJS.
Khi mô-đun CommonJS được yêu cầu đầu tiên, thuộc tính exports
được khởi tạo thành một đối tượng trống phía sau hậu trường.
module.exports = {};
Sau đó, mô-đun có thể quyết định mở rộng thuộc tính exports
này hoặc ghi đè lên.
exports.namedExport = function() { /* ... */ }; // extends
module.exports = { namedExport: function() { /* ... */ } }; // overrides
Vì vậy, khi A
đòi hỏi B
và B
đòi hỏi A
ngay sau đó, A
không được thực hiện một lần nữa (mà sẽ tạo ra một vòng lặp vô hạn), nhưng exports
tài sản hiện tại của nó được trả về. Vì A
yêu cầu B
ở đầu tệp, trước khi xuất bất kỳ thứ gì, cuộc gọi require('A')
trong mô-đun B
sẽ mang lại đối tượng trống.
Sửa lỗi chung cho phụ thuộc vòng là đặt hàng nhập của bạn ở cuối tệp, sau bạn đã xuất các biến cần thiết bởi các mô-đun khác.
A
:
module.exports = { foo: 'bar' };
require('B'); // at this point A.exports is not empty anymore
B
:
var A = require('A');
A.foo === 'bar';
Nguồn
2015-05-22 07:06:28
Tôi đã viết một công cụ để kiểm tra dự án Webpack của bạn cho phụ thuộc vòng tròn: https://github.com/DelvarWorld/webpack-cyclic-dependency- checker –