Questo non è un problema di webpack ma una proprietà di moduli CommonJS.
Quando un modulo CommonJS viene richiesto per la prima volta, la proprietà exports
viene inizializzata su un oggetto vuoto dietro le quinte.
module.exports = {};
Il modulo può quindi decidere di estendere questa proprietà exports
, o ignorarla.
exports.namedExport = function() { /* ... */ }; // extends
module.exports = { namedExport: function() { /* ... */ } }; // overrides
Così, quando A
richiede B
e B
richiede A
subito dopo, A
non è ancora eseguita (che produrrebbe un loop infinito), ma la sua attuale exports
proprietà viene restituito. Dal A
richiesto B
nella parte superiore del file, prima di esportare qualsiasi cosa, la chiamata require('A')
nel modulo B
genererà un oggetto vuoto.
Una correzione comune per le dipendenze circolari consiste nel mettere le importazioni alla fine del file, dopo il che hai esportato le variabili richieste da altri moduli.
A
:
module.exports = { foo: 'bar' };
require('B'); // at this point A.exports is not empty anymore
B
:
var A = require('A');
A.foo === 'bar';
fonte
2015-05-22 07:06:28
ho scritto uno strumento per controllare il vostro progetto Webpack per le dipendenze circolari: https://github.com/DelvarWorld/webpack-cyclic-dependency- checker –