__dirname 与 __filename 的区别

(2)__dirname

表示当前执行脚本所在的目录的绝对路径。在编写文件操作相关代码时非常有用,例如:

(3)__filename

表示当前执行脚本的绝对路径,包含文件名。结合 __dirname 可以方便地获取文件相关信息,例如:

来源整理自:vue3js.cn 面试官系列

补充

补充:两者都是 CommonJS 模块中的"全局"变量(实际由模块包装函数注入),只在当前脚本所在的模块作用域内有效。

  • __dirname:返回当前模块所在目录的绝对路径(不含末尾文件名)。
  • __filename:返回当前模块文件的绝对路径(含文件名)。
  • 二者在 ESM 模块中不再默认提供,需要通过 import.meta.url + fileURLToPath() 自行计算:
// CommonJS
console.log(__dirname);  // /Users/me/project/src
console.log(__filename); // /Users/me/project/src/index.js

// ESM(推荐写法)
import { fileURLToPath } from 'node:url'
import { dirname } from 'node:path'
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);