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__' [重复]的主要内容,如果未能解决你的问题,请参考以下文章