我的场景:我将上传一些少量的配置数据,也很少从数据库中更改数据以表示exports.config
,我想使用而不是配置文件,以便应用程序管理员(不是系统管理员:)可以通过 Web 界面配置应用程序,我想确保每次require
此模块时都不会重新加载此数据。
我是否可以假设我在 node.js 模块(函数定义之外)中拥有的任何 [初始化] 代码,无论我require
这个模块多少次,它在每个进程生命周期中都只执行一次?
可能是一个愚蠢的问题,但我正在努力理解node.js功能的某些方面。
是的。
每个进程生存期可能需要多次文件/模块,但只会执行一次。至少默认情况下。
这对您来说效果很好,因为您只需在应用程序初始化时查询一次config
表,导出的值将保持不变,直到应用程序重新启动。
来自 nodejs 模块缓存文档
模块在首次加载后缓存。这意味着(除其他事项外)如果对
require('foo')
的每个调用都将返回完全相同的对象,如果它将解析为相同的文件。多次调用
require('foo')
可能不会导致模块代码多次执行。这是一个重要的功能。有了它,可以返回"部分完成"的对象,从而允许加载传递依赖项,即使它们会导致循环。如果要让模块多次执行代码,请导出一个函数,然后调用该函数。