Node.js使用ES模块导入路由时出现Module not found错误如何解决
问题原因
- 路径与实际文件不匹配:Node.js ESM 规范要求相对路径导入必须和实际文件的路径、大小写、扩展名完全一致。类Unix系统(Linux、MacOS)的文件系统默认大小写敏感,如果你的实际目录名是
routes而非Routes、文件名是authRoute.js而非AuthRoute.js,就会触发报错。 - 目录导入未补全路径:如果你导入的
AuthRoute.js实际是一个目录,ESM 不会像 CommonJS 一样自动解析目录下的index.js文件,必须手动补全完整路径。 - 项目模块配置错误:如果未在项目根目录
package.json中声明"type": "module",Node.js 会默认使用 CommonJS 规范解析模块,也可能导致 ESM 语法的导入导出失效。
修复方案
- 核对文件路径、大小写与扩展名:确保导入路径和实际文件完全一致,示例调整如下:
// 假设实际目录为小写routes,文件名为authRoute.js import authRouter from './routes/authRoute.js';
如果导入的是目录下的index.js,需要补全路径:
import authRouter from './Routes/AuthRoute/index.js';
- 确认项目模块配置:在根目录
package.json中添加"type": "module"声明,开启Node.js的ESM解析模式:
{ "type": "module", // 其余原有配置项 }
- 若为TypeScript项目,需要在
tsconfig.json中配置对应模块解析规则:
{ "compilerOptions": { "module": "NodeNext", "moduleResolution": "NodeNext" // 其余原有配置项 } }
导入TypeScript源文件时,导入路径需要写编译后的.js后缀,无需写源文件的.ts后缀。
内容的提问来源于stack exchange,提问作者Relex Mode
相关产品推荐
相关产品推荐

