如何获取在 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 脚本文件

使用脚本从客户端发送 http post 并在 NODEJS 中获取请求

Shell脚本中如何获取软链接的地址

nodejs 获取串口数据

shell脚本获取参数&在线执行shell脚本

如何在nodejs里调用执行系统命令