Turborepo集成Prisma与NestJS时出现模块未找到错误
解决Turborepo Monorepo中Prisma共享包的模块找不到错误
问题根源
错误ERR_MODULE_NOT_FOUND: Cannot find module '/.../packages/database/src/client'的核心原因是:你的database共享包中,src/index.ts尝试导入的./client文件不存在——这个文件应该是Prisma生成的Client代码,但尚未生成或生成路径配置错误。
分步解决方案
1. 确认Prisma生成路径配置
打开packages/database/prisma/schema.prisma,验证generator client的output路径是否指向src/client:
generator client { provider = "prisma-client-js" output = "../src/client" // 必须确保此路径正确,指向database包的src/client目录 }
2. 手动生成Prisma Client
进入packages/database目录,执行生成命令:
npx prisma generate
执行完成后,src/client目录会生成Prisma Client的代码文件,解决模块缺失问题。
3. 配置Turborepo自动触发生成
为了避免每次启动都手动生成,在根目录的turborepo.json中添加任务依赖:
{ "pipeline": { "dev": { "dependsOn": ["^prisma:generate"] }, "prisma:generate": { "outputs": ["packages/database/src/client/**"] } } }
同时在packages/database/package.json中添加对应脚本:
{ "scripts": { "prisma:generate": "prisma generate" } }
这样启动开发环境时,Turborepo会自动先执行Prisma Client生成任务。
4. 验证导入语句正确性
确保packages/database/src/index.ts的导入逻辑正确:
import './client'; export * from '@prisma/client';
额外检查项
- 确认
packages/database/package.json的type字段与项目模块规范一致(ES模块设为module,CommonJS则移除或设为commonjs) - 检查NestJS项目
fm-api中导入共享包的语句是否正确,例如:import { PrismaClient } from '@fm/database'(需匹配database包的name字段)
内容的提问来源于stack exchange,提问作者Seyrinian
相关产品推荐
相关产品推荐

