[英]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.