我为什么要在每个文件上都要求所有模块?

时间:2014-08-29 20:03:19

标签: javascript node.js

我经常看到的默认方法是:

// 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');
...

我更喜欢使用_前缀来标识libs / modules而我不使用var因为我不想在我的应用程序的每个文件上重复所有包的require / setup

这样我就可以在server.js文件上require()模块一次,并在任何地方使用它。

这是个坏主意吗?

2 个答案:

答案 0 :(得分:5)

模块缓存在nodejs中。最佳做法是在需要时提出要求。

来自node.js docs:

  

模块在第一次加载后进行缓存。这意味着   (除此之外)每个要求的呼叫(' foo')都会得到   返回完全相同的对象,如果它将解析为相同   文件。

     

多次调用require(' foo')可能不会导致模块代码   多次执行。这是一个重要的特征。用它,   "部分完成"可以返回对象,从而允许传递   即使它们会导致循环,也要加载依赖项。

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

答案 1 :(得分:1)

在您的前端开发中(如果它不仅仅是服务器端节点问题)您肯定可以在基础或主要js上提出要求,并通过将它们附加到窗口来全局引用它们,文档或任何其他高度范围的对象,但最佳做法是仅在需要时才需要和加载模块。