快速结论:该报错通常出现在升级到 Node 20 后,构建过程因 require() 加载 ES Module 失败而中断。优先检查依赖中是否存在仅支持 ESM 的包,并确认构建工具与 Node 20 的兼容性。
适用环境:Node 20、npm 10.2.4;Issue 仅确认了此运行环境,未提及其他操作系统或硬件细节。
最快修复方案:暂无确认的一步修复方案。Issue 中用户已验证的临时方案是锁定到之前的 Node 版本(未指明具体版本号),以规避该问题。
注意事项:该报错发生在 Diffusers 仓库的构建流程中,并非推理或训练阶段的运行错误。Issue 最终被关闭,但维护者未在讨论中提供官方修复补丁,因此锁版本属于用户侧规避,并非官方认可方案。
问题场景
用户在将运行环境从旧版 Node 升级到 Node 20 后,执行 Diffusers 项目(或关联的前端/工具链)的构建任务时触发失败。构建日志显示 Node 的 require() 无法加载 ES Module 格式的依赖文件,导致进程退出。
报错原文
ERR_REQUIRE_ESM: require() of ES Module not supported
原因分析
可能原因:升级到 Node 20 后,部分依赖包(可能包括构建工具、配置文件加载器或传输层库)被解析为纯 ESM(ES Module)格式。当构建脚本通过 CommonJS 的 require() 去加载这些包时,Node.js 会直接抛出 ERR_REQUIRE_ESM 错误。此问题通常由依赖的版本行为变化或 Node 版本策略收紧所致,而非 Diffusers 核心 Python 推理逻辑的错误。
环境排查
- Node.js 版本:请确认是否确实为 v20.x,并记录具体小版本号(如 20.0.x 或 20.10.x),不同小版本对 ESM 的处理可能有差异。
- npm 版本:Issue 中记录为 10.2.4,确认当前锁文件与 npm 版本是否一致。
- 构建工具链:排查构建脚本中调用的工具(如 Babel、Webpack、Vite、tsup 等)以及它们的配置文件类型(
.js、.mjs、.cjs)。 - 依赖清单:检查
package.json及锁文件中"type": "module"的字段声明,或是否存在仅提供exports字段且仅包含 ESM 入口的包。
解决步骤
- 可优先尝试:锁定 Node 版本。如 Issue 评论中用户所述,将 Node 版本回退到升级前的 LTS 版本(例如 Node 18),然后重新执行构建,确认报错是否消失。这是当前唯一在 Issue 讨论中被用户验证可用的临时规避方案。
- 检查 ESM 依赖:如果无法降低 Node 版本,请在构建报错堆栈中定位具体是哪一个模块被
require()。查看该模块的package.json,确认其是否为type: module或仅支持import。 - 修改加载方式(推测):如果定位到某个依赖或配置文件触发了错误,且项目允许修改构建脚本,可尝试将对应文件的引入方式从
require()改为动态import(),或将构建入口转换为 ESM 格式(如修改文件扩展名为.mjs)。此为可能修复方向,未被 Issue 验证。 - 查阅依赖发布说明:确认出现问题的依赖包是否有针对 Node 20 的兼容补丁版本,尝试升级或降级该依赖到兼容版本。
验证方法
在应用上述任意调整后,重新执行之前失败构建命令。若构建执行完毕且不再抛出 ERR_REQUIRE_ESM 相关堆栈,且产出的文件/包结构完整,则可以确认问题已被解决或规避。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug/Perf]: hybrid-SWA prefix caching collapses to zero for ALL requests in multi-session round-robin at ~25% pool occupancy (Gemma-4-31B; e](https://www.chat-gpts.plus/wp-content/uploads/2026/09/48435-ed9f024c-768x403.jpg)