【发布时间】:2012-11-29 12:34:57
【问题描述】:
如何获取 NodeJS 应用程序中正在执行的脚本的文件名?
【问题讨论】:
标签: node.js
如何获取 NodeJS 应用程序中正在执行的脚本的文件名?
【问题讨论】:
标签: node.js
使用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);
【讨论】:
您需要使用process.argv。其中将包含从命令行执行的脚本的名称,它可能与您在__filename 中找到的名称不同。哪个合适取决于您的需求。
http://nodejs.org/docs/latest/api/process.html#process_process_argv
【讨论】:
__filename 有何不同?看起来一样。
__filename 是您当前所在文件的名称。如果我有一个包含 5 个其他模块的脚本,则有 6 种不同的可能性__filename 将是什么,取决于我检查的位置。此外,该脚本可能有一个用于执行它的符号链接。 process.argv 会给你实际运行的内容。
你可以使用变量__filename
http://nodejs.org/docs/latest/api/globals.html#globals_filename
【讨论】:
__filename 变量的代码的文件名时有用。相反,如果您需要知道正在运行的整个 nodejs 程序的名称,请使用下面的 @Brad 答案。