三种解决办法 ReferenceError: __dirname is not defined in ES module scope

1 fileURLToPath 结合 import.meta.url

fileURLToPath Added in: v10.12.0 import.meta.url Added in: v10

ts 复制代码
import path from 'path';
import { fileURLToPath } from 'url';

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

2. import.meta.dirname ✔️

Added in: v21.2.0, v20.11.0

最少依赖最推荐写法

ts 复制代码
const __dirname = import.meta.dirname
  • 冷知识 1:import 虽然不能在 cjs 中使用,但是 import.meta 可以
  • 冷知识 2:Node.js 的 LTS 已经是 v22 了,v18 还有三周就要过保了,v20 也只有一年保质期了。LTS 意味着稳定和安全,大家踊跃升级呀。

当前时间数据:2025-4-10

Release Security Support Latest
23 Ends in 1 month and 3 weeks(01 Jun 2025) 23.11.0(01 Apr 2025)
22 (LTS) Ends in 2 years(30 Apr 2027) 22.14.0(11 Feb 2025)
20 (LTS) Ends in 1 year(30 Apr 2026) 20.19.0(13 Mar 2025)
18 (LTS) Ends in 3 weeks(30 Apr 2025) 18.20.8(27 Mar 2025)

来自 endoflife.date/nodejs

可以看下 import.meta 里面还有哪些值

ts 复制代码
console.log('process.versions:', process.versions.node);
console.log(import.meta);
ts 复制代码
❯ node import.meta.js
process.versions: 22.7.0
[Object: null prototype] {
  dirname: 'F:\\temp',
  filename: 'F:\\temp\\import.meta.js',
  resolve: [Function: resolve],
  url: 'file:///F:/temp/import.meta.js'
}

3. new URL 结合 import.meta.url

只能在非 Windows 操作系统中用。Macos 系统未尝试大家可以帮忙试试。

ts 复制代码
import path from 'path'

const __dirname = path.dirname(new URL(import.meta.url).pathname)

Windows 下返回 __dirname: /F:/temp 正确应该是 F:\\temp

更多详见 nodejs.org/docs/latest...

相关推荐
濮水大叔17 小时前
为什么 AI 最擅长 React/Next.js,却很少看到真正好用的 Next.js 开源项目?
react.js·node.js·next.js
AI行业学习19 小时前
Claude Code + cc-switch + Git + Node.js 全套下载+安装+配置完整版
开发语言·git·python·前端框架·node.js·html·notepad++
万亿少女的梦1681 天前
基于微信小程序、Express与MongoDB的校园失物招领系统设计
mongodb·微信小程序·node.js·express·系统设计
AI行业学习1 天前
Claude Code + cc-switch + Git + Node.js 一站式完整安装配置教程【8.3】
git·python·安全·前端框架·node.js·html·notepad++
AI行业学习1 天前
Claude Code + cc-switch + Git + Node.js 一站式完整安装配置教程(2026最新·国内可用版)
人工智能·git·python·安全·node.js·html·notepad++
用户847181054192 天前
从0开始打造自己的个人智能体(一)——Deep Agents js环境配置与对话入门
node.js·agent
减瓦2 天前
从 0.1 到 26:一个运行时的十七年进化史
node.js
晓得迷路了2 天前
栗子前端技术周刊第 140 期 - pnpm、Node 新 API 文档网站、Oxlint...
前端·javascript·node.js
孟陬3 天前
Node.js 测试报告格式一览和自定义 json 格式 `--test-reporter=spec | tap | dot | junit | lcov`
node.js
陳陈陳4 天前
🚀 前端流式输出革命:SSE + BFF 架构从零到一实战指南
vue.js·架构·node.js