📜  __filename 未在 mjs 文件中定义 - Javascript (1)

📅  最后修改于: 2023-12-03 15:29:16.356000             🧑  作者: Mango

未在mjs文件中定义__filename - Javascript

当您在尝试在MJS文件中访问__filename时,可能会遇到__filename未在mjs文件中定义的错误。这是因为在ECMAScript模块中,在文件中没有内置的全局常量和变量。


下面是一些解决方案:

解决方案1:使用import.meta.url

要在MJS文件中获取当前文件的文件路径,可以使用import.meta.url。此代码行将返回包含当前MJS文件路径的字符串。这意味着你可以使用类似以下的代码来代替__filename

const filePath = new URL(import.meta.url).pathname;
解决方案2:使用import.meta.dirname

如果您只需要访问当前MJS文件的目录路径,可以使用import.meta.dirname。这将返回包含当前MJS文件目录路径的字符串。这意味着您可以使用类似以下的代码:

const dirPath = path.dirname(new URL(import.meta.url).pathname);

请注意,上述示例使用Node.js的path模块。

解决方案3:使用process.cwd()和__dirname

您可以使用process.cwd()__dirname变量来获取当前工作目录和当前MJS文件的目录路径,如以下代码所示:

const currentWorkingDirectory = process.cwd();
const currentDirName = __dirname;

请注意,这些变量是Node.js运行时中内置的全局变量。


总结

无法在MJS文件中访问__filename,因为它不是ECMAScript模块中的全局变量。但是,您可以使用许多其他方法来获取当前文件的路径和目录路径,包括使用import.meta.url,import.meta.dirname,process.cwd()和__dirname。根据您的特定需求,选择正确的方法并不困难。