一尘不染

清除要求缓存

node.js

我试图按照此处的建议从缓存中删除模块。

文档中,我们阅读:

require.cache

  • 目的

需要时将模块缓存在此对象中。 通过从该对象中删除键值,下一个require将重新加载模块。

因此,我创建了一个1.js包含一行的名为的文件:

module.exports = 1;

然后我需要通过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和清除缓存?

进行调试时,我发现有一个Module._cache对象在执行时未清除require.cache = {}


阅读 248

收藏
2020-07-07

共1个答案

一尘不染

require.cache只是公开的缓存对象引用,不会直接使用此属性,因此更改它不会执行任何操作。您需要遍历键,实际上是遍历delete它们。

2020-07-07