如何清除Node模块的缓存问题

如何清除Node模块的缓存问题

问题描述:
Node.js中,为了不造成变量和函数的污染,为开发者提供了简单的模块系统. 要在一个文件模块中获取其他文件模块的内容,首先需要使用require()函数加载这个模块;
在模块加载过程中,对于多次使用同一模块标识加载模块的情况,node只会加载一次,这是由于第一次加载某个模块时,node会缓存该模块,再次加载时将会从缓存中获取. 所有缓存的模块保存在require.cach中,可以手动删除模块缓存.

  • Node模块的缓存问题

下面我们以一个例子来说明:
foo.js

console.log('foo模块被加载了')

test.js

// 同一模块标识,node第一次加载完成时会缓存该模块
// 再次加载时,将会从缓存中获取.
require('./foo')
require('./foo')
require('./foo')
require('./foo')
require('./foo')

在上述代码中,一共加载5次foo.js模块;
但是打开终端,运行结果,如下图:
在这里插入图片描述
描述: 执行5次加载的过程中,只输出一个"foo模块被加载了",说明foo.js只加载了一次

得出结论: 同一模块标识,node第一次加载完成时会缓存该模块,再次加载时,将会从缓存中获取.

  • 清除缓存

在实际开发中,有时候开发者并不希望加载的模块被缓存,这时候可以进行删除缓存的的操作

解决方法: 在被加载的模块foo.js中添加一行代码:

delete require.cache[module.filename]

然后打开终端,重新执行结果,如下图:
在这里插入图片描述
描述: 输出5次"foo模块被加载了",说明加载foo模块后,模块没有被缓存

结论: 加载foo模块后,缓存被成功清除了

猜你喜欢

转载自blog.csdn.net/Calla_Lj/article/details/86156718