5

我是 Node.js 的新手,但很喜欢模块系统和require(). 话虽这么说,来自 C 背景,看到require()到处都是相同的模块让我感到不安。总而言之,它让我做出了一些与 C 语言不同的设计选择。例如:

  • 我应该require()每个定义猫鼬模型的文件中使用猫鼬吗?或者将 mongoose 实例注入到定义模型的每个文件中。
  • 我应该require()在每个需要它们的模块中使用我的猫鼬模型吗?或者有一个模型提供者被传递并用于提供这些模型。

等等。对于经常使用依赖注入的人——我的直觉 C 感觉告诉我require()一个模块只需要一次,并根据需要传递它。然而,在查看了一些开源的东西之后,这似乎不是 Node 的方式。require()确实让事情变得超级容易..

过度使用这种机制是否有害?

4

2 回答 2

6

require()使用时缓存模块。当您看到到处都需要相同的文件或模块时,它只会被加载一次,而存储module.exports的则被传递。这意味着您可以require在任何地方使用,而不必担心性能和内存问题。

于 2013-08-01T18:51:32.610 回答
0

由于 cptroot 声明在您需要的任何地方都需要一个模块,而不是将其作为参数传递,这样做是安全的,而且也更容易。但是,您应该将任何 require 调用视为无法轻易更改的硬编码依赖项。例如,如果你想模拟一个模块来测试这些硬编码的依赖关系,那将会受到伤害。

因此,将模块实例作为参数传递而不是一次又一次地要求它可以减少硬编码依赖项的数量,因为您现在注入了这个依赖项。例如,在您的测试中,您将受益于轻松注入模拟。

如果你走这条路,你会想要使用一个依赖注入容器来帮助你注入所有的依赖并摆脱所有硬编码的 require 调用。要选择适合您的项目的依赖注入容器,您应该阅读这篇出色的文章。另请查看火起来!我实施了。

于 2014-04-23T22:04:13.440 回答