1

我的场景:我将上传一些少量的配置数据,并且很少更改数据库中的数据来表示exports.config,我想使用它而不是配置文件,以便应用程序管理员(不是系统管理员 :) 可以通过网络配置应用程序接口,我想确保每次这个模块被require“d”时都不会重新加载这些数据。

我是否可以假设我在 node.js 模块(函数定义之外)中拥有的任何 [初始化] 代码在每个进程生命周期中只会执行一次,而不管我require这个模块多少次?

可能是一个愚蠢的问题,但我很难理解 node.js 如何运作的某些方面。

4

1 回答 1

2

是的。

每个进程生命周期可能需要多次文件/模块,但只会执行一次。至少默认情况下。

这对您很有效,因为您可以config在应用程序初始化时简单地查询您的表,并且导出的值将保持不变,直到应用程序重新启动。


nodejs 模块缓存文档

模块在第一次加载后被缓存。这意味着(除其他外)每次调用都require('foo')将返回完全相同的对象,如果它会解析为同一个文件。

多次调用require('foo')可能不会导致模块代码被多次执行。这是一个重要的特点。有了它,可以返回“部分完成”的对象,从而允许加载传递依赖项,即使它们会导致循环。

如果你想让一个模块多次执行代码,那么导出一个函数,然后调用那个函数。

于 2012-12-24T12:18:53.530 回答