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

时间:2015-01-26 06:15:45

标签: node.js node-modules

我一直试图模块化我的服务器和网络应用。我已经在这里和这里阅读了Node中的exports和module.exports。

http://www.sitepoint.com/understanding-module-exports-exports-node-js/

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

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

1 个答案:

答案 0 :(得分:2)

当您require()节点中的模块时,它将在闭包内执行,并且模块导出的值将被缓存。因此,同一模块的任何其他require()(位于相同的绝对路径)将始终获得相同的对象/值/无论如何。

因此,在您的websockets示例中,您在模块中执行的require('websockets')不会自动提供给需要您模块的任何人。模块中的所有内容都在一个单独的本地范围内完成(您可以读取/写入所有模块都可访问的全局范围,但确实 这就是为什么你需要明确地为它们导出值以供外人看到的原因。