最近新發(fā)現(xiàn)了一個(gè)在 NodeJS 中導(dǎo)致出現(xiàn)循環(huán)引用的可能情況。下面說(shuō)明一下。
本來(lái)呢,如果直接在module.exports
上設(shè)置導(dǎo)出屬性,那么循環(huán)引用發(fā)生時(shí),也可以獲取到正確的值。因?yàn)椴](méi)有改變?cè)瓉?lái)導(dǎo)出對(duì)象的引用。
比如這樣,
module.exports.a = '123';
但是,如果導(dǎo)出的是一個(gè)函數(shù),那么需要在導(dǎo)入之前先導(dǎo)出本函數(shù),才不會(huì)發(fā)生循環(huán)引用時(shí)候獲取不到正確的值。否則導(dǎo)入的仍舊是舊的默認(rèn)module.exports
對(duì)象,然而它會(huì)被覆蓋,是無(wú)用的。
function A(){}
module.exports = A;
require('...')
請(qǐng)看這個(gè) issue