Can I know, in node.js, if my script is being run directly or being loaded by another script?

前端 未结 3 1776
Happy的楠姐
Happy的楠姐 2020-12-04 11:19

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__

相关标签:
3条回答
  • 2020-12-04 11:41

    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
    
    0 讨论(0)
  • 2020-12-04 11:44

    The accepted answer is fine. I'm adding this one from the official documentation for completeness:

    Accessing the main module

    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.

    0 讨论(0)
  • 2020-12-04 11:59

    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.

    0 讨论(0)
提交回复
热议问题