解决Node.js报错: __filename is not defined in ES module scope

1,542 阅读1分钟

问题描述

当我们在Node.js中使用 ES module的时候,Node.js 内置的 __filename 与 __dirname 就变得不可用了。

解决方案

我们可以通过使用 import.meta.url 获得文件系统下的文件url,再通过 url 模块的 fileURLToPath 方法 将url转换成为可用的文件路径,代码如下:

import {fileURLToPath} from 'url';

const __filename = fileURLToPath(import.meta.url);

这样,就可以获得文件的绝对路径。

此外,如果想要获得 __dirname,可以使用 path 模块的 dirname 方法,完整代码如下:

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

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