已使用import仍触发[ERR_REQUIRE_ESM]错误的技术求助
解决Node.js [ERR_REQUIRE_ESM] 报错(已用import仍无效)
问题场景
我写了这段代码:
import { toString } from 'nlcst-to-string'; import { retext } from 'retext'; import retextPos from 'retext-pos'; import retextKeywords from 'retext-keywords'; const sentence = "President Obama woke up Monday facing a Congressional defeat that many in both parties believed could hobble his presidency." function process(params) { // some code } exports.main = processComment;
运行后直接报错:
[ERR_REQUIRE_ESM]: Must use import to load ES module
明明已经用了import语法,试过在package.json加"type": "module"、把文件改成.mjs,都没解决。
排查和解决步骤
1. 修正模块导出的混用问题
你代码里用了ES模块的import,但最后导出用的是CommonJS的exports.main,还存在笔误——定义的函数是process,却导出不存在的processComment,这会直接导致模块系统冲突。把导出改成ES模块格式:
// 命名导出 export const main = process; // 要是想用默认导出就写这个: // export default process;
2. 检查Node.js版本
retext这类依赖都是纯ES模块,要求Node.js版本至少是14.13.0或者16.0.0以上。先查自己的Node版本:
node -v
版本不够就升级到LTS版,比如18.x或20.x。
3. 排查调用链是否有CommonJS模块
如果项目里还有其他.js文件(没设"type": "module",属于CommonJS)导入了当前这个ES模块,也会触发这个错误。要么把所有文件统一成ES模块,要么在CommonJS文件里用动态导入:
// CommonJS文件里这么导入ES模块 import('./your-es-module-file.mjs').then(module => { // 使用模块内容 });
4. 清缓存重装依赖
有时候依赖安装的缓存会搞出奇怪问题,试试清掉重装:
rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者ewfewfjio
相关产品推荐
相关产品推荐

