我正在尝试按照这里建议的方法从缓存中删除一个模块。
在文档中我们可以看到:
require.cache
- Object
当需要时,这些模块会被缓存在此对象中。 通过从该对象中删除键值,下一个 require 将重新加载该模块。
所以,我创建了一个名为1.js
的文件,其中只包含一行:
module.exports = 1;
然后我通过 node
shell 要求它:
ionicabizau@laptop:~/Documents/test$ node
> require("./1")
1
> require.cache
{ '/home/ionicabizau/Documents/test/1.js':
{ id: '/home/ionicabizau/Documents/test/1.js',
exports: 1,
parent:
{ id: 'repl',
exports: [Object],
parent: undefined,
filename: '/home/ionicabizau/Documents/test/repl',
loaded: false,
children: [Object],
paths: [Object] },
filename: '/home/ionicabizau/Documents/test/1.js',
loaded: true,
children: [],
paths:
[ '/home/ionicabizau/Documents/test/node_modules',
'/home/ionicabizau/Documents/node_modules',
'/home/ionicabizau/node_modules',
'/home/node_modules',
'/node_modules' ] } }
# edited file to export 2 (module.exports = 2;)
> require.cache = {}
{}
> require.cache
{}
> require("./1") // supposed to return 2
1
因此,当我的文件包含“module.exports = 2”并清除缓存时,为什么“require(“./1”)”返回“1”?进行调试时,我看到有一个“Module._cache”对象,在执行“require.cache = {}”时未被清除。
Object.keys(require.cache).forEach(function(key) { delete require.cache[key] })
这段代码的作用是:遍历require.cache
对象的属性,删除每个属性对应的缓存模块。 - Dancrumb