繁体   English   中英

在node.js应用程序的每个模块中要求使用某些相同软件包的影响和替代方案?

[英]Impact and alternatives on requiring some of the same packages in every modules of my node.js application?

假设我有一个如下应用程序:

  • server.js (主要)需要不同的外部节点程序包,例如underscore.js

    var Underscore = require("underscore");

  • server.js还需要自己在应用程序中定义的一些模块。 例如,它可能需要路由器模块来处理Express路由。

    var Router = require("./sources/router.js");

  • 然后我有如下的router.js文件:

     var Router; Router = (function() { function Router(app, oauth) { app.get('/', function(request, response) { // ... }); } return Router; })(); module.exports = Router; 

问题:

  • 如果要在Router模块中使用underscore ,是否应该再次要求? 我应该为每个模块都这样做吗? 有什么影响? 我最终会得到类似:

     var Router; Router = (function() { Router.prototype.underscore = require("underscore"); function Router(app, oauth) { app.get('/', function(request, response) { // this.underscore. ... // using underscore ... }); } return Router; })(); module.exports = Router; 

     var Underscore = require("underscore"); var Router = require("./sources/router.js"); router = new Router(); 
  • 显然,在初始化Router ,我也可以注入它作为参数,但是在我看来,这在应用程序中可能并不可行,因为我可能最终会使用数十个软件包,尤其是对于像这样的通用软件包。

     var underscore = require("underscore"); var Router = require("./sources/router.js"); var router = new Router(underscore); 
  • 另外,我可以将underscore var设置为全局underscore ,但是我真的不喜欢此选项。

  • 还有其他选择吗?

  • 在执行时间,内存方面,系统地在每个模块中导入软件包有什么影响? 我想了解这种情况下节点引擎的行为。

是的,您应该再次require它。 节点缓存了所需的模块,因此第二次您require东西实际上并没有运行该文件。 它只是返回缓存的对象。 因此,内存影响基本上为0(或多或少指向同一对象的额外指针),执行时间类似地可以忽略不计(通过模块名称在对象中查找的开销)。

这意味着两个require返回的对象并不完全相同; 他们实际上是同一个对象。 对一个的任何更改都会影响另一个。 因此,您可以将模块扩展到一个位置,然后将这些扩展扩展到任何地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM