// a.js
console.log('entered A')
module.exports = `A(id: ${Math.floor(Math.random()*100)})
// b.js
var a = require('./a')
console.log('entered B')
module.exports = `${a}\nB(id: ${Math.floor(Math.random()*100)})`
// c.js
var b = require('./b')
console.log('entered C')
module.exports = `${b}\nC(id: ${Math.floor(Math.random()*100)})`
c.js -> b.js -> a.js
var u = require('./manage_module_cache')
var old_c = require('./c')
console.log('[old_c]')
console.log(old_c)
console.log('\nremoving\n')
u.removeDependingModuleCaches(require.resolve('./c'))
console.log('[old_c]')
console.log(old_c)
var new_c = require('./c')
console.log('[new_c]')
console.log(new_c)
outputs
entered A
entered B
entered C
[old_c]
A(id: 88)
B(id: 64)
C(id: 27)
removing
[old_c]
A(id: 88)
B(id: 64)
C(id: 27)
entered A
entered B
entered C
[new_c]
A(id: 63)
B(id: 71)
C(id: 88)