You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

node -r加载ES Module报ERR_REQUIRE_ESM错误的解决方法

问题原因

-r(全称--require)是Node.js为CommonJS模块设计的预加载参数,底层通过require()同步加载目标模块,无法直接加载ES Module格式的包,因此会抛出ERR_REQUIRE_ESM错误。

可行方案

方案1:使用官方原生ESM预加载参数(推荐)

Node.js v20.15.0及以上稳定版正式提供了适配ES Module的预加载参数--import,预加载逻辑和-r一致,直接替换参数即可正常加载mriya:

node --import mriya 你的入口文件路径

如果你的Node版本在v18.19.0到v20.14.0区间,--import为实验性特性,直接使用可能弹出实验特性警告,不影响功能运行,也可以选择下面的兼容方案。

方案2:CommonJS桥接兼容(全Node版本支持)

如果使用低于v20.15.0的Node版本,可以通过一层CommonJS桥接脚本绕过require()无法加载ESM的限制:

  1. 新建CommonJS格式的桥接文件,例如命名为preload-mriya.cjs,写入如下内容:
// 桥接文件仅做ESM加载转发,无额外逻辑
import('mriya');

如果需要在业务代码中直接访问mriya的导出,可以在动态import的回调里把导出挂载到全局对象:

import('mriya').then(mriyaMod => {
  globalThis.mriya = mriyaMod;
});
  1. 启动Node进程时,用-r加载这个本地桥接文件即可:
node -r ./preload-mriya.cjs 你的入口文件路径

如果需要默认预加载mriya、不想每次启动都写参数,可以把预加载配置写到NODE_OPTIONS环境变量中,Node启动时会自动读取该变量的参数注入:

# 原生方案的环境变量配置(当前终端会话临时生效)
export NODE_OPTIONS="--import mriya"

# 桥接方案的环境变量配置
# export NODE_OPTIONS="-r /你存放桥接文件的绝对路径/preload-mriya.cjs"

内容的提问来源于stack exchange,提问作者link89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:48:19