Node.JS:检测是通过require调用还是通过命令行直接调用

问题描述 投票:270回答:6

如何检测使用SH:node path-to-file或JS:require('path-to-file')调用了Node.JS文件?

这是等效于我在Perl中上一个问题的Node.JS:How can I run my Perl script only if it wasn't loaded with require?

node.js require
6个回答
416
投票
if (require.main === module) {
    console.log('called directly');
} else {
    console.log('required as a module');
}

在此查看文档:https://nodejs.org/docs/latest/api/modules.html#modules_accessing_the_main_module


81
投票

还有另一种较短的方法(在上述文档中未列出)。>>

var runningAsScript = !module.parent;

我在this blog post中概述了所有这些如何工作的更多细节。


4
投票

我对解释中使用的术语感到有些困惑。所以我不得不做一些快速测试。


3
投票

如果使用ES6模块,请尝试以下操作:


2
投票

就像在Python中一样,我总是发现自己想记住如何编写这个该死的代码片段。因此,我决定为其创建一个简单的模块。由于访问调用者的模块信息并不直接,所以花了一些时间进行开发,但是很高兴看到如何实现。


0
投票

如果您使用的是ESM模块,则没有module

© www.soinside.com 2019 - 2024. All rights reserved.