在 Node 中有两个常见的变量:__dirname_ 和 __filename,但是仅仅是在 commonjs 规范中才能使用,ES module 中是无法使用的。
console.log(__dirname, __filename);
因为这两个变量是 Node 在 commonjs 规范下帮忙注入的,而 ES module 自然不会完成注入这两个变量的操作。可以通过 ES module 的 meta data 构造出这两个变量。
import { fileURLToPath } from 'url';
import { dirname } from 'path';
const currentfile = import.meta.url; // 当前文件的 URL,会以 file:// 协议开头
const __filename = fileURLToPath(currentfile); // 当前文件绝对路径
const __dirname = dirname(__filename); // 当前文件所在目录绝对路径
console.log(__dirname);
console.log(__filename);