升级Prisma 7后NestJS项目启动报错:模块未找到
我用NestJS v11.1.6做后端,搭配Prisma和NextJS前端,把Prisma从v6升级到v7后,项目构建无报错,但启动时触发以下错误:
[ERR_MODULE_NOT_FOUND]: Cannot find module '/Users/Projects/project-example/backend/dist/src/app.module' imported from /Users/Projects/project-example/backend/dist/src/main.js
已按照迁移指南更新了prisma.config.ts:
import "dotenv/config"; import { defineConfig, env } from "prisma/config"; export default defineConfig({ schema: "prisma/schema.prisma", migrations: { path: "prisma/migrations", }, datasource: { url: env("DATABASE_URL"), }, });
同时更新了tsconfig.json:
{ "compilerOptions": { "module": "ESNext", "moduleResolution": "node", "declaration": false, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, "target": "ES2023", "sourceMap": true, "outDir": "./dist", "baseUrl": "./", "skipLibCheck": true, "strict": true, "esModuleInterop": true } }
可能的解决方法:
添加ESM模式标识
在项目根目录的package.json中加入"type": "module",明确告知Node.js当前项目采用ESM模块规范:{ "type": "module", // 其他原有配置... }调整模块解析策略
将tsconfig.json中的moduleResolution从node改为nodenext或bundler,匹配ESNext模块的解析规则:{ "compilerOptions": { "module": "ESNext", "moduleResolution": "nodenext", // 其他原有配置... } }优化TypeScript编译配置
在tsconfig.json的compilerOptions中补充以下配置,确保生成的导入语句符合ESM要求:{ "compilerOptions": { // 原有配置... "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "moduleSuffixes": [".js", ".ts"] } }清理旧构建文件并重新编译
删除dist目录后重新执行构建,避免旧的CommonJS文件干扰:rm -rf dist npm run build重新生成Prisma客户端
Prisma v7对客户端结构做了调整,重新生成确保依赖匹配:npx prisma generate
补充说明:
Prisma v7默认切换为ESM优先模式,而NestJS在ESM模式下对模块导入的后缀要求更严格。如果上述步骤未解决问题,可以检查dist/src/main.js中的导入语句,确认app.module的路径是否带有.js后缀——若没有,可手动调整源码中的导入(比如import { AppModule } from './app.module.js'),更推荐通过tsconfig配置让TypeScript自动处理该问题。
内容的提问来源于stack exchange,提问作者Milos

