导出的模块节点中所需的模块会发生什么?

我一直在试图模块化我的服务器和networking应用程序。 我已经阅读了关于在这里和这里的节点出口和module.exports。

Understanding module.exports and exports in Node.js

http://liangzan.net/blog/blog/2012/06/04/how-to-use-exports-in-nodejs/

我得到它如何使这些function可用于其他文件/脚本,但导出的文件中所需的模块会发生什么? 如果我需要一些文件中的websockets,导出它,并要求在另一个文件中,另一个文件是否inheritance导出的文件的websockets? 它是类似于C中的头文件,只是将该模块粘贴到您的文件?

当你require()节点中的一个模块时,它将在一个闭包中执行,并且由模块导出的值被高速caching。 因此,对于相同的模块(位于相同的绝对path),任何额外的require()都将始终获得相同的对象/值/任何值。

因此,在你的websockets例子中,你在你的模块中执行的require('websockets')对于任何需要你模块的人来说都不是自动提供的。 模块中的所有内容都在一个单独的本地范围内完成(您可以读取/写入所有模块可访问的全局范围,但实际上不应该这样做)。 这就是为什么你需要明确地导出值,以便外人看到。