Node.js使用ES6 Modules导入模块报错ERR_MODULE_NOT_FOUND如何解决
错误原因
该错误由Node.js ES模块(ESM)的原生规范限制导致:
- CommonJS模块的
require语法默认支持省略.js等本地文件后缀,Node会自动尝试补全后缀匹配对应文件;但ES6标准的import语法强制要求明确声明导入本地文件的完整后缀,不会自动补全.js后缀。 - 你的导入语句
import { connectMongoDB } from "./config/db"未携带.js后缀,ESM解析器无法匹配到db.js文件,因此抛出模块未找到错误。
解决方法
可根据项目需求任选以下一种方案:
方案1:补全导入路径后缀(推荐)
直接修改server.js中的导入语句,补充.js后缀即可:
import { connectMongoDB } from "./config/db.js"; connectMongoDB();
该方案完全符合ES模块标准,无兼容风险。
方案2:调整ESM解析规则
如果希望保留省略后缀的写法,首先确认你已在项目package.json中添加"type": "module"开启ESM支持,再新增experimentalSpecifierResolution配置:
{ "type": "module", "experimentalSpecifierResolution": "node" }
该配置会让Node的ESM解析器复用CommonJS的路径匹配规则,支持省略.js后缀导入本地文件,仅兼容Node 14.13及以上版本。
方案3:沿用CommonJS规范
如果项目无ESM专属特性需求,将所有import/export语法替换为require/module.exports的CommonJS写法即可正常运行,这也是你之前测试有效的方案。
内容的提问来源于stack exchange,提问作者Sandeep Bisht
相关产品推荐
相关产品推荐

