节点模块的执行范围

时间:2015-11-24 22:57:45

标签: node.js module scope

我对节点很新,这个问题必须在节点模块的内部工作方面做得更多。

当我们需要一个模块时,它应该被加载并在需要它的主文件的上下文中运行(我们使用node命令从控制台运行的文件)。因此,由于词法作用域规则,在此上下文中定义的所有函数(所需的节点模块)应该可以访问主模块中的所有变量,但事实并非如此。例如,除非我们明确传递,否则自定义路由模块无权访问应用实例。

那些模块在一些独立的范围内执行了吗?

1 个答案:

答案 0 :(得分:1)

模块在相同的v8上下文中执行,但它们是using vm.runInThisContext()完成的。 documentation for this function告诉您正在执行的代码不能访问本地范围(例如global),但 访问app变量。因此,在大多数情况下,您可以将其视为一个单独的上下文(例如,无法访问局部变量,函数等),尽管从技术上讲它不是。

对于HTTP路由的特定用例,通常项目将传入{{1}}对象(假设此处为Express),或者将导出父脚本在某个路径上安装的路由器实例。