我需要库(mongo,async ...)和几乎我代码中的每个文件中的一些核心功能。据我所知,加载模块是一个昂贵的过程。另外,在每个文件中编写更多代码行是一件痛苦的事。
当应用程序启动时,要求它一次是否更聪明?
我知道全局变量一般都很糟糕,但在这种情况下有多糟糕?
答案 0 :(得分:4)
使用全局变量总是一个BAD(故意大写)的想法,所以你应该留意另一个解决方案。
由于模块在加载时会被缓存,因此它们并不太昂贵。无论你做过一次还是多次都没关系。
所以最简单的方法就是require
模块到处都需要它。
现在,有时模块需要一些配置。然后,您需要确保在第一次加载模块时完成此操作。为此,创建一个这样的包装器模块:
var foo = require('foo');
foo.configure(options);
// Or do whatever you need to do here to configure foo.
module.exports = foo;
现在您可以像这样使用它:
var configuredFoo = require('./configuredFoo');
这应该可以解决问题。
答案 1 :(得分:0)
首次加载模块有点昂贵(虽然它只发生在服务器启动时,通常是从本地硬盘驱动器加载,而不是通过网络加载)。但是,在它被加载一次之后,它被node.js缓存,并且对同一模块的后续require()
调用只是非常快速地返回完全相同的模块而不进行任何额外的加载。
因此,让多个模块通过require()
共享相同的子模块是一种有效且有意的方式来设计node.js代码而不使用单个全局变量。