Dairesel bağımlılıklar olsa bile, requir.cache içindeki bir girdiyi sorunsuz bir şekilde silebilirsiniz. Sildiğinizde, modül nesnesinin kendisini değil, yalnızca önbelleğe alınmış modül nesnesine bir başvuruyu sildiğiniz için, dairesel bağımlılıklar söz konusu olduğunda, hala bu modül nesnesine başvuran bir nesne vardır.
Varsayalım:
komut dosyası a.js:
var b=require('./b.js').b;
exports.a='a from a.js';
exports.b=b;
ve b.js komut dosyası:
var a=require('./a.js').a;
exports.b='b from b.js';
exports.a=a;
ne zaman yaparsın:
var a=require('./a.js')
var b=require('./b.js')
Alacaksın:
> a
{ a: 'a from a.js', b: 'b from b.js' }
> b
{ b: 'b from b.js', a: undefined }
şimdi b.js'nizi düzenlerseniz:
var a=require('./a.js').a;
exports.b='b from b.js. changed value';
exports.a=a;
ve yap:
delete require.cache[require.resolve('./b.js')]
b=require('./b.js')
Alacaksın:
> a
{ a: 'a from a.js', b: 'b from b.js' }
> b
{ b: 'b from b.js. changed value',
a: 'a from a.js' }
===
Yukarıdakiler doğrudan node.js'yi çalıştırıyorsa geçerlidir. Ancak, jest gibi kendi modül önbellekleme sistemine sahip araçlar kullanılıyorsa , doğru ifade şöyle olacaktır:
jest.resetModules();