问题描述
当我们在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);