下面是如何解决“__dirname 未定义在 ES 模块范围內”的錯誤的方法。

在使用 ES 模块時,无法使用 __dirname

在 Node 脚本中,可以使用 __dirname 获取 当前 JavaScript 文件所在文件夹的路径,许多 Node.js 项目中都会使用它。

但是,如果在 ES 模块中使用它,你将遇到“__dirname 在 ES 模块范围內未定义”的錯誤。

在这种情况下,你可以做什么呢?

我通过使用在 Node.js GitHub 问题页面中找到的解决方案来解决此问题。

首先,你需要导入 Node.js 的 path 模块url 模块中的 fileURLToPath 函数:

import path from 'path';
import { fileURLToPath } from 'url';

然后,你可以按照以下方式复制 __dirname 的功能:

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

顺便一提,这也复制了 __filename,它返回正在执行的代码的文件名。

现在,你可以像往常一样使用 __dirname

console.log(__dirname)