NestJS报错:找不到模块'./app.controller',编译正常运行异常求助
解决NestJS编译无错但运行时找不到模块的问题
我之前也踩过这个坑,结合你的报错信息和代码来看,大概率是编译输出异常或者配置问题导致的,咱们一步步排查:
1. 先确认编译后的文件是否存在
首先去你的C:\Users\DELL\Documents\DokunFiles\Nestjs\app\api\dist\src目录下,看看有没有app.controller.js这个文件。如果找不到,说明TypeScript编译时没有生成这个文件,得先解决编译的问题。
2. 检查tsconfig.json的关键配置
打开项目根目录的tsconfig.json,重点核对以下几个配置项:
- outDir:确保设置为
"./dist",这样编译产物会输出到dist目录下 - include:必须包含
"src/**/*",保证src下的所有.ts文件都被编译 - exclude:不要把
src目录或者app.controller.ts排除在外
给你一个标准的NestJS tsconfig.json参考片段:
{ "compilerOptions": { "module": "commonjs", "declaration": true, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, "target": "ES2021", "sourceMap": true, "outDir": "./dist", "baseUrl": "./", "incremental": true, "skipLibCheck": true, "strictNullChecks": false, "noImplicitAny": false, "strictBindCallApply": false, "forceConsistentCasingInFileNames": false, "noFallthroughCasesInSwitch": false }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] }
3. 排查文件名大小写问题
Windows系统默认大小写不敏感,但Node.js在处理模块导入时,如果你开启了forceConsistentCasingInFileNames(tsconfig里的配置),或者后续部署到Linux环境,大小写不一致就会报错。比如你代码里写的是import { AppController } from './app.controller';,但实际文件名是App.controller.ts,编译后生成的是App.controller.js,这时候Node.js就找不到小写的app.controller.js。
4. 清理缓存并重新编译
有时候编译缓存会导致异常,试试以下步骤:
- 手动删除项目根目录下的
dist文件夹 - 删除
node_modules/.cache目录(Windows直接右键删除即可) - 重新执行编译命令:
nest build(或者直接用tsc) - 再运行项目:
npm start
5. 确认package.json的启动命令
检查你的package.json里的start命令是否指向正确的入口文件,比如:
"scripts": { "start": "node dist/src/main.js", "build": "nest build" }
你的栈跟踪里显示入口是dist/src/main.js,所以这个应该没问题,但还是确认下路径有没有写错。
按照上面的步骤排查,应该能解决找不到模块的问题。
内容的提问来源于stack exchange,提问作者techstack
相关产品推荐
相关产品推荐

