当我发现需求不在其中时,我正在检查节点的全局和模块。我不知道这是不是很神奇,但是如果有人能解释,如果require是全局的那么为什么它不在全局对象中,也不在模块对象中?
答案 0 :(得分:4)
因为它位于范围中。在文件中加载时,幕后节点wraps源代码,使您的代码实际上如下所示:
(function (exports, require, module, __filename, __dirname) {
// here goes what's in your js file
});
然后调用匿名函数,传入exports
的新对象和require
函数的引用。 (Further detail here.)
现在应该明白为什么你可以打电话给require
,即使它不是真正的全球性。
答案 1 :(得分:0)
要求核心模块编译成二进制文件。请在此处详细阅读http://nodejs.org/api/modules.html#modules_core_modules。
核心模块在lib /文件夹的节点源中定义。
如果核心模块的标识符传递给require(),则始终优先加载核心模块。例如,require('http')将始终返回内置的HTTP模块,即使存在该名称的文件。