【问题标题】:Require module and Create object in multiple places在多个地方需要模块和创建对象
【发布时间】:2015-12-21 11:08:04
【问题描述】:
var express = require('express'); 
var app = express();

这个问题是关于 express 模块的示例,但这可能适用于您需要模块并使用构造函数的任何模块。

所以通用代码是

var M = require('M'); 
var myM = M();

我的问题是,在我的代码中(在路由器文件中),我在许多文件中使用了上述两行。

所以

  1. 这是使用模块的正确方法吗?是否应该在一个地方(由构造函数)要求和构造每个模块,然后在整个代码中使用构造的对象?
  2. 使用我使用过的模块有什么副作用(额外的 RAM 使用量、延迟......)?

【问题讨论】:

  • 这在很大程度上取决于M 在做什么。一个更具体的例子可以回答这个问题。
  • 您的问题主题听起来像是您打算不止一次询问有关使用express 模块的问题,但您的问题主体似乎在询问require 的用法,而不是关于@ 987654326@具体。
  • @AaronDufour express 模块本身可以作为例子。
  • @Claies 这个问题的目的是询问任何具有相关数据和方法的模块。是否需要这样一个模块并在代码库中的多个位置创建一个对象是一个问题?问题。

标签: node.js express npm


【解决方案1】:

1) 这是使用模块的正确方式吗?

这有两个部分:

  • 每个模块是否应该 require() 它所依赖的其他模块,即使多个模块具有共同的依赖关系?

    是的。这是 NodeJS 中的规范。 (在#2 中进一步解释。)

    而且,随着原生 import/export 可供使用,它将继续成为常态。

  • 然后应该建造它们吗?

    这取决于单个模块以及它是否公开了构造函数/工厂/等。为此,您必须参考模块自己的文档。

    但是,有一个构造函数/工厂/等。是例外多于常态。模块的默认导出只是一个对象,它通常会附加方法。大多数core modules 都遵循这种形式。


2) 像我这样使用模块有什么副作用

再次,两部分:

  • require() 应该没有额外的消费。在每个文件被评估后,它是module.exportsis cached,因此后续的需求将只是从缓存中获得相同的值。

  • 但是,工厂/构造函数可能会在每次使用时创建更多对象并消耗更多内存。


特别是快递:

  • 在多个文件中使用require('express') 来定义应用程序的不同部分非常有用,尤其是通过express.Routers。这可以帮助您组织应用程序。

  • 如果您想将您的应用程序定义为一系列子应用程序或定义多个应用程序同时运行,则只需多次调用工厂函数即可。

【讨论】:

  • 好的,所以从你的回答中我知道 1.在几个地方需要一个模块是绝对可以的。 2.如果只公开方法,使用模块的对象就可以了。 3.如果模块的对象有数据属性,那么最好不要创建多个对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 2019-09-29
  • 2012-02-11
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多