在 ES module 中使用 __dirname 和 __filename

306 阅读1分钟

在 Node 中有两个常见的变量:__dirname___filename,但是仅仅是在 commonjs 规范中才能使用,ES module 中是无法使用的。

console.log(__dirname, __filename);

CleanShot_2024-07-11_22.49.08@2x

因为这两个变量是 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);

CleanShot_2024-07-11_22.55.49@2x