我刚刚开始使用node.js,而且我对Python有一些经验。在Python中,我可以检查__name__
变量是否设置为"__main__"
,如果是,我知道我的脚本是直接运行的。在这种情况下,我可以运行测试代码或直接以其他方式使用模块。
node.js中有类似内容吗?
答案 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.parent
和require.main === module
都有效。
如果您对更多详细信息感兴趣,请阅读my detailed blog post about this topic。