我试图按照此处的建议从缓存中删除模块。
在文档中,我们阅读:
require.cache 目的 需要时将模块缓存在此对象中。 通过从该对象中删除键值,下一个require将重新加载模块。
需要时将模块缓存在此对象中。 通过从该对象中删除键值,下一个require将重新加载模块。
因此,我创建了一个1.js包含一行的名为的文件:
1.js
module.exports = 1;
然后我需要通过node外壳:
node
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和清除缓存?
require("./1")
1
module.exports = 2
进行调试时,我发现有一个Module._cache对象在执行时未清除require.cache = {}。
Module._cache
require.cache = {}
require.cache只是公开的缓存对象引用,不会直接使用此属性,因此更改它不会执行任何操作。您需要遍历键,实际上是遍历delete它们。
require.cache
delete