Sie können einen Eintrag in require.cache immer problemlos löschen, auch wenn es zirkuläre Abhängigkeiten gibt. Da Sie beim Löschen nur einen Verweis auf das zwischengespeicherte Modulobjekt und nicht das Modulobjekt selbst löschen, wird das Modulobjekt nicht überprüft, da im Falle von zirkulären Abhängigkeiten immer noch ein Objekt vorhanden ist, das auf dieses Modulobjekt verweist.
Angenommen, Sie haben:
Skript a.js:
var b=require('./b.js').b;
exports.a='a from a.js';
exports.b=b;
y Skript b.js:
var a=require('./a.js').a;
exports.b='b from b.js';
exports.a=a;
wenn Sie es tun:
var a=require('./a.js')
var b=require('./b.js')
erhalten Sie:
> a
{ a: 'a from a.js', b: 'b from b.js' }
> b
{ b: 'b from b.js', a: undefined }
Wenn Sie nun Ihre b.js bearbeiten:
var a=require('./a.js').a;
exports.b='b from b.js. changed value';
exports.a=a;
und tun:
delete require.cache[require.resolve('./b.js')]
b=require('./b.js')
erhalten Sie:
> a
{ a: 'a from a.js', b: 'b from b.js' }
> b
{ b: 'b from b.js. changed value',
a: 'a from a.js' }
\===
Das oben Gesagte gilt, wenn node.js direkt ausgeführt wird. Wenn Sie jedoch Tools verwenden, die über ein eigenes Modul-Caching-System verfügen, wie z. B. scherzen wäre die richtige Aussage:
jest.resetModules();