我可以在node.js中知道我的脚本是直接运行还是被另一个脚本加载?

时间:2012-01-14 18:28:29

标签: node.js module

我刚刚开始使用node.js,而且我对Python有一些经验。在Python中,我可以检查__name__变量是否设置为"__main__",如果是,我知道我的脚本是直接运行的。在这种情况下,我可以运行测试代码或直接以其他方式使用模块。

node.js中有类似内容吗?

3 个答案:

答案 0 :(得分:89)

您可以使用module.parent来确定当前脚本是否已被其他脚本加载。

e.g。

a.js

if (!module.parent) {
    console.log("I'm parent");
} else {
    console.log("I'm child");
}

b.js

require('./a')

运行node a.js将输出:

I'm parent

运行node b.js将输出:

I'm child

答案 1 :(得分:37)

接受的答案很好。我在the official documentation添加了这个完整性:

访问主模块

直接从节点运行文件时,require.main设置为module。这意味着您可以通过测试确定文件是否已直接运行

require.main === module

对于文件"foo.js",如果通过true运行,则为node foo.js,如果false运行则为require('./foo')

由于module提供了filename属性(通常等同于__filename),因此可以通过选中require.main.filename来获取当前应用的入口点。

答案 2 :(得分:9)

选项!module.parentrequire.main === module都有效。 如果您对更多详细信息感兴趣,请阅读my detailed blog post about this topic