如何获取在 NodeJS 中执行的脚本的文件名?
Posted
技术标签:
【中文标题】如何获取在 NodeJS 中执行的脚本的文件名?【英文标题】:How to get filename of script being executed in NodeJS? 【发布时间】:2012-11-29 12:34:57 【问题描述】:如何获取 NodeJS 应用程序中正在执行的脚本的文件名?
【问题讨论】:
【参考方案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);
【讨论】:
这个no longer works with ES modules.【参考方案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
http://nodejs.org/docs/latest/api/globals.html#globals_filename
【讨论】:
这仅在您想知道当前运行正在查看__filename
变量的代码的文件名时有用。相反,如果您需要知道正在运行的整个 nodejs 程序的名称,请使用下面的 @Brad 答案。
这个no longer works with ES modules.以上是关于如何获取在 NodeJS 中执行的脚本的文件名?的主要内容,如果未能解决你的问题,请参考以下文章
使用 exec() 在 PHP 中执行 nodejs 脚本文件