Reputation: 59323
I'm just getting started with node.js and I have some experience with Python. In Python I could check whether the __name__
variable was set to "__main__"
, and if it was I'd know that my script was being run directly. In that case I could run test code or make use of the module directly in other ways.
Is there anything similar in node.js?
Upvotes: 72
Views: 14501
Reputation: 18219
You can use module.parent
to determine if the current script is loaded by another script.
e.g.
a.js
:
if (!module.parent) {
console.log("I'm parent");
} else {
console.log("I'm child");
}
b.js
:
require('./a')
run node a.js
will output:
I'm parent
run node b.js
will output:
I'm child
Upvotes: 100
Reputation: 5889
The accepted answer is fine. I'm adding this one from the official documentation for completeness:
When a file is run directly from Node, require.main
is set to its module
. That means that you can determine whether a file has been run directly by testing
require.main === module
For a file "foo.js"
, this will be true
if run via node foo.js
, but false
if run by require('./foo')
.
Because module
provides a filename
property (normally equivalent to __filename
), the entry point of the current application can be obtained by checking require.main.filename
.
Upvotes: 51
Reputation: 11847
Both options !module.parent
and require.main === module
work.
If you are interested in more details please read my detailed blog post about this topic.
Upvotes: 11