2014-08-29 86 views
2

默认的方法,我常常看到的是:为什么我需要每个文件上的所有模块?

// repeat this in all files 
var express = require('express'); 
var mongoose = require('mongoose'); 
var async = require('async'); 
... 

但在我的应用程序的NodeJS我这样做是:

// include this only on the server file 
_express = require('express'); 
_mongoose = require('mongoose'); 
_async = require('async'); 
... 

我更喜欢使用_前缀标识库/模块和我不请使用var,因为我不想在我的应用程序的每个文件中重复所有包的要求/设置。

这种方式我可以require()模块只有一次server.js文件,并在任何地方使用它。

这是一个坏主意吗?

+2

我认为在全球范围内保持依赖关系是“不好的做法”。这并不是说没有优惠的情况(因为它可能会非常方便地为全球各地使用的某些东西设置全局别名),但是要谨慎行事 - 而不是默认选择。 – user2864740 2014-08-29 20:06:31

回答

5

模块缓存在nodejs中。最好的做法是在需要的地方提出要求。

从node.js的文档:

模块是他们第一次加载后缓存。这意味着 (其中包括)每次调用require('foo')将返回完全相同的对象 (如果它将解析为相同的 文件)。

多次调用require('foo')可能不会导致多次执行模块代码为 。这是一个重要的功能。通过它,可以返回 “部分完成”的对象,从而允许即使在它们会导致循环时也加载依附关系。

http://nodejs.org/api/modules.html

+0

你能解释一下吗?这是关于内存开销吗?例如,猫鼬......我需要模块并将它连接到总是?这是一个很好的做法吗? – user3175226 2014-08-29 20:07:06

+2

您只连接一次。当你需要在你的其他模块中使用猫鼬时,你可以使用'var mongoose = require('mongoose');'和你的连接获得相同的猫鼬对象。你可以通过在模块中执行'console.log(mongoose.connection);'来测试。 – Jordonias 2014-08-29 20:26:11

+1

应该注意的是,你可以用'mongoose.createConnection'连接猫鼬。默认连接('mongoose.connection')是用'mongoose.connect'建立的连接 – Jordonias 2014-08-29 20:32:20

1

在您的前端开发(的情况下,它不只是一个服务器端节点的问题),你肯定可以让你需要一个基地或主JS上,让他们在全球范围引用,追加到窗口,文档或任何其他高度范围的对象,但最好的做法是仅在需要时加载模块。

相关问题