Vous pouvez toujours supprimer sans problème une entrée dans require.cache, même en cas de dépendances circulaires. Parce que lorsque vous supprimez, vous supprimez juste une référence à l'objet module mis en cache, pas l'objet module lui-même, l'objet module ne sera pas GCed parce que dans le cas de dépendances circulaires, il y a toujours un objet référençant cet objet module.
Supposons que vous ayez :
script a.js :
var b=require('./b.js').b;
exports.a='a from a.js';
exports.b=b;
et script b.js :
var a=require('./a.js').a;
exports.b='b from b.js';
exports.a=a;
quand vous le faites :
var a=require('./a.js')
var b=require('./b.js')
vous obtiendrez :
> a
{ a: 'a from a.js', b: 'b from b.js' }
> b
{ b: 'b from b.js', a: undefined }
maintenant si vous éditez votre b.js :
var a=require('./a.js').a;
exports.b='b from b.js. changed value';
exports.a=a;
et faire :
delete require.cache[require.resolve('./b.js')]
b=require('./b.js')
vous obtiendrez :
> a
{ a: 'a from a.js', b: 'b from b.js' }
> b
{ b: 'b from b.js. changed value',
a: 'a from a.js' }
\===
Ce qui précède est valable si vous exécutez directement node.js. Cependant, si vous utilisez des outils qui possèdent leur propre système de mise en cache des modules, tels que jest l'affirmation correcte serait :
jest.resetModules();
8 votes
Module NPM github.com/gajus/require-new
0 votes
Un autre module NPM avec un observateur : npmjs.com/package/updated-require
0 votes
Il est possible de mettre en cache le contenu du fichier sans utiliser require et de l'évaluer pour différents scopes. stackoverflow.com/questions/42376161/