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

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

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

Hubro asked 2019-11-07T04:58:05Z
3个解决方案
90 votes

您可以使用node b.js确定当前脚本是否由另一个脚本加载。

例如

node b.js

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

node b.js

require('./a')

运行node b.js将输出:

I'm parent

运行node b.js将输出:

I'm child
qiao answered 2019-11-07T04:58:51Z
36 votes

接受的答案很好。 为了完整起见,我从官方文档中添加了此内容:

访问主模块

当直接从Node运行文件时,将module设置为其filename。这意味着您可以通过测试确定文件是否已经直接运行。

require.main === module

对于文件module,如果通过2603237505914814897410运行,则为filename,但如果由require('./foo')运行,则为require.main.filename

因为module提供了filename属性(通常等效于__filename),所以可以通过检查require.main.filename获得当前应用程序的入口点。

David Braun answered 2019-11-07T04:59:53Z
9 votes

选件!module.parentrequire.main === module均适用。如果您对更多详细信息感兴趣,请阅读我有关此主题的详细博客文章。

Thorsten Lorenz answered 2019-11-07T05:00:21Z
translate from https://stackoverflow.com:/questions/8864365/can-i-know-in-node-js-if-my-script-is-being-run-directly-or-being-loaded-by-an