我一直试图模块化我的服务器和网络应用。我已经在这里和这里阅读了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中的头文件,只是将该模块粘贴到您的文件中?
答案 0 :(得分:2)
当您require()
节点中的模块时,它将在闭包内执行,并且模块导出的值将被缓存。因此,同一模块的任何其他require()
(位于相同的绝对路径)将始终获得相同的对象/值/无论如何。
因此,在您的websockets示例中,您在模块中执行的require('websockets')
不会自动提供给需要您模块的任何人。模块中的所有内容都在一个单独的本地范围内完成(您可以读取/写入所有模块都可访问的全局范围,但确实 这就是为什么你需要明确地为它们导出值以供外人看到的原因。