【问题标题】:How to get filename of script being executed in NodeJS?如何获取在 NodeJS 中执行的脚本的文件名?
【发布时间】:2012-11-29 12:34:57
【问题描述】:

如何获取 NodeJS 应用程序中正在执行的脚本的文件名?

【问题讨论】:

    标签: node.js


    【解决方案1】:

    使用path模块的basename方法:

    var path = require('path');
    var filename = path.basename(__filename);
    console.log(filename);
    

    Here 是上述示例的文档。

    正如 Dan 指出的,Node 正在使用“--experimental-modules”标志处理ECMAScript modules。节点 12 仍为 supports __dirname and __filename 同上。


    如果您使用--experimental-modules 标志,则有一个alternative approach

    另一种方法是获取path to the current ES module

    const __filename = new URL(import.meta.url).pathname;
    

    对于包含当前模块的目录:

    import path from 'path';
    
    const __dirname = path.dirname(new URL(import.meta.url).pathname);
    

    【讨论】:

    【解决方案2】:

    您需要使用process.argv。其中将包含从命令行执行的脚本的名称,它可能与您在__filename 中找到的名称不同。哪个合适取决于您的需求。

    http://nodejs.org/docs/latest/api/process.html#process_process_argv

    【讨论】:

    • 它与__filename 有何不同?看起来一样。
    • @1252748 您应该阅读文档:nodejs.org/docs/latest/api/modules.html#modules_filename __filename 是您当前所在文件的名称。如果我有一个包含 5 个其他模块的脚本,则有 6 种不同的可能性__filename 将是什么,取决于我检查的位置。此外,该脚本可能有一个用于执行它的符号链接。 process.argv 会给你实际运行的内容。
    • 小心,实际执行的可能不是您的脚本实际所在的位置。换句话说,它可能是一个符号链接。
    【解决方案3】:

    【讨论】:

    • 这仅在您想知道当前运行正在查看__filename 变量的代码的文件名时有用。相反,如果您需要知道正在运行的整个 nodejs 程序的名称,请使用下面的 @Brad 答案。
    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2014-01-05
    • 2011-03-23
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2016-12-08
    相关资源
    最近更新 更多