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

在node.js中,我可以知道我的脚本是直接运行还是由另一个脚本加载吗?,node.js,module,Node.js,Module,我刚刚开始使用node.js,我对Python有一些经验。在Python中,我可以检查\uuu name\uuuu变量是否设置为“\uuu main\uuuu”,如果设置为,我就知道脚本正在直接运行。在这种情况下,我可以运行测试代码或以其他方式直接使用模块 node.js中是否有类似的内容?您可以使用module.parent来确定当前脚本是否由其他脚本加载 e、 g a.js: if (!module.parent) { console.log("I'm parent"); } els

我刚刚开始使用node.js,我对Python有一些经验。在Python中,我可以检查
\uuu name\uuuu
变量是否设置为
“\uuu main\uuuu”
,如果设置为,我就知道脚本正在直接运行。在这种情况下,我可以运行测试代码或以其他方式直接使用模块


node.js中是否有类似的内容?

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

e、 g

a.js

if (!module.parent) {
    console.log("I'm parent");
} else {
    console.log("I'm child");
}
require('./a')
b.js

if (!module.parent) {
    console.log("I'm parent");
} else {
    console.log("I'm child");
}
require('./a')
运行
节点a.js
将输出:

I'm parent
I'm child
运行
节点b.js
将输出:

I'm parent
I'm child

两个选项均
!module.parent
require.main===module
工作。
如果您对更多细节感兴趣,请阅读。

可以接受答案。为了完整起见,我将从中添加此项:

访问主模块 当文件直接从节点运行时,
require.main
被设置为其
模块
。这意味着您可以通过测试来确定文件是否已直接运行

require.main === module
对于文件
“foo.js”
,如果通过
节点foo.js
运行,则为
true
,但如果通过
require('./foo')
运行,则为
false


由于
模块
提供了一个
文件名
属性(通常相当于
\uu文件名
),因此可以通过选中
require.main.filename

来获得当前应用程序的入口点。看起来也比python干净多了。您还可以使用
module.main
,它是similar@Raynos我想你的意思是
require.main===module
(上的官方建议)。也许只是我,但检查
module.parent
似乎比比较
require.main
module
更直观。仅供参考,
module.parent
自节点14.6.0起已被弃用-请参阅。如前所述,检查
require.main===module
现在是推荐的方法。感谢您的注意,修复了链接。仅供参考,
module.parent
从节点14.6.0开始就不推荐使用-请参阅。正如所说,检查
require.main===module
现在是推荐的方法。接受的答案现在已被弃用,因此这是最好的答案