下面是如何解决“__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)