我正在尝试将缓存中的模块删除为suggested here。
在我们阅读的documentation中:
require.cache
- 对象
模块在需要时缓存在此对象中。 通过从此对象中删除键值,下一个需要将重新加载模块。
因此,我创建了一个名为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
那么,当我的文件包含require("./1")
并清除缓存时,为什么1
会返回module.exports = 2
?
进行一些调试时,我发现有一个Module._cache
对象在require.cache = {}
时没有被清除。
答案 0 :(得分:30)
require.cache
只是一个公开的缓存对象引用,不直接使用此属性,因此更改它不会执行任何操作。您需要迭代密钥并实际delete
。