如何检测是否使用SH:node path-to-file
或JS:调用了Node.JS文件require('path-to-file')
?
这是相当于Perl中我先前的问题的Node.JS:仅在未加载require的情况下才能运行我的Perl脚本?
如何检测是否使用SH:node path-to-file
或JS:调用了Node.JS文件require('path-to-file')
?
这是相当于Perl中我先前的问题的Node.JS:仅在未加载require的情况下才能运行我的Perl脚本?
我对解释中使用的术语感到有些困惑。所以我不得不做一些快速测试。
我发现它们产生相同的结果:
var isCLI = !module.parent;
var isCLI = require.main === module;
对于其他困惑的人(并直接回答问题):
var isCLI = require.main === module;
var wasRequired = !isCLI;
就像在Python中一样,我总是发现自己想记住如何编写这个该死的代码片段。因此,我决定为其创建一个简单的模块。由于访问调用者的模块信息并不直接,所以花了一些时间进行开发,但是很高兴看到如何实现。
因此,其想法是调用一个模块,并询问调用方模块是否为主要模块。我们必须找出调用者函数的模块。我的第一种方法是对已接受的答案进行修改:
但这不能保证有效。
module.parent
指向将我们加载到内存中的模块,而不是调用我们的模块。如果是调用程序模块将此帮助程序模块加载到内存中,那就很好。但是,如果不是这样,我们将束手无策。因此,我们需要尝试其他方法。我的解决方案是生成堆栈跟踪并从此处获取调用方的模块名称:现在我们可以做:
或更可读:
不可能忘记 :-)