node.js 相当于 python 的 if __name__ == '__main__' [重复]

Posted

技术标签:

【中文标题】node.js 相当于 python 的 if __name__ == \'__main__\' [重复]【英文标题】:node.js equivalent of python's if __name__ == '__main__' [duplicate]node.js 相当于 python 的 if __name__ == '__main__' [重复] 【发布时间】:2011-06-26 07:07:32 【问题描述】:

我想检查我的模块是否被包含或直接运行。如何在 node.js 中做到这一点?

【问题讨论】:

isMain 即将来到您附近的 node.js :) @DimaTisnek Source 或isMain 上的更多信息?听起来很棒,但我找不到任何关于它的信息 我能找到的唯一重要参考是a Gist from CJ Silveiro,它描述了 NPM 对 Node.js 中 ESM 模块的提议/愿景。我无法从 Node.js 本身找到任何官方信息。任何链接将不胜感激 【参考方案1】:

The docs 描述了另一种可能是首选方法的方法:

当一个文件直接从 Node 运行时,require.main 被设置为它的模块。

要利用这一点,请检查此模块是否是主模块,如果是,则调用您的主代码:

var fnName = function() 
    // main code


if (require.main === module) 
    fnName();

编辑:如果您在浏览器中使用此代码,您将收到“参考错误”,因为“require”未定义。为防止这种情况,请使用:

if (typeof require !== 'undefined' && require.main === module) 
    fnName();

【讨论】:

您总是必须检查 require.main === 模块 无论 您的函数名称。为了清楚起见,上面的代码应该修改为:var fnName = function() // code if (require.main === module) fnName(); 为了浏览器的兼容性,我会用 try...catch 包装它 @OhadCohen "try...catch" 也可能捕获真正的错误。我认为最好只检查 typeof 是否需要 != 'undefined'。 但是如果文件被分叉了怎么办? 遗憾的是,此功能已随 --experimental-modules 消失。【参考方案2】:
if (!module.parent) 
  // this is the main module
 else 
  // we were require()d from somewhere else

编辑:如果您在浏览器中使用此代码,您将收到“参考错误”,因为“模块”未定义。为防止这种情况,请使用:

if (typeof module !== 'undefined' && !module.parent) 
  // this is the main module
 else 
  // we were require()d from somewhere else or from a browser

【讨论】:

这是否记录在某处? 不,但它用于node.js's tests之一 对我来说,这比接受的答案更好,并且不需要模块的“名称” 接受的答案也不使用模块的名称。 不推荐使用。现在使用module.main

以上是关于node.js 相当于 python 的 if __name__ == '__main__' [重复]的主要内容,如果未能解决你的问题,请参考以下文章

201902161119_《Node.js之流(Stream)一二事》

如何从 Node.js 中执行外部程序?

python06_流程控制

使用 node.js 在命令行上运行 DOH

使用node.js在命令行上运行DOH

使用Node.js管理多个文件流