Client 未生成或过期:generate 的常见坑
现象
你改了 schema.prisma,跑了 prisma generate,但代码里还是报旧类型错误、类型提示还是旧的、或者 import { PrismaClient } from '@prisma/client' 报模块找不到。
排查步骤
第一步:确认版本号一致
# 检查 prisma CLI 和 @prisma/client 的版本
npm list prisma @prisma/client
# 输出应该是同版本,比如都是 5.18.0
如果两个版本不一样,必须统一:
npm install prisma@latest @prisma/client@latest
第二步:清理再重新生成
# 删掉旧的生成产物
rm -rf node_modules/.prisma
# 重新 generate
npx prisma generate
Windows 上:
Remove-Item -Recurse -Force node_modules\.prisma
npx prisma generate
第三步:确认 Schema 文件位置
# 看看 Prisma 实际用了哪个 Schema
npx prisma generate
# 输出里应该有:Prima Schema loaded from prisma/schema.prisma
如果它找不到 Schema 或用了错误的 Schema,用 --schema 显式指定:
npx prisma generate --schema=./path/to/schema.prisma
第四步:重启 TypeScript 服务器
VS Code 的 TypeScript 服务器可能缓存了旧类型。手动重启:
- Ctrl+Shift+P 打开命令面板
- 输入 "TypeScript: Restart TS Server"
- 回车
或者直接重启 VS Code(最彻底)。
第五步:检查 output 配置
如果你在 schema.prisma 的 generator 里自定义了 output:
generator client {
provider = "prisma-client-js"
output = "../custom-client-path"
}
那 Prisma 不会生成到 node_modules/.prisma/client,而是生成到你指定的位置。这种情况下你不能 import { PrismaClient } from '@prisma/client',要从自定义路径导入。
绝大多数项目不需要自定义 output——恢复默认行为就行。
常见原因速查表
| 现象 | 原因 | 解决 |
|---|---|---|
| 类型还是旧的 | TypeScript 服务器缓存 | 重启 VS Code 或 TS Server |
@prisma/client 报模块找不到 | 没装 @prisma/client 包 | npm install @prisma/client(装完自动 generate 一次) |
| 新 model 没有 PrismaClient 方法 | generate 没跑成功 | 手动跑 npx prisma generate,看报错 |
| 类型不匹配(Schema 改了但类型没变) | 版本不一致 | npm install prisma@X @prisma/client@X 锁定同版本 |
| PrismaClient 方法签名变了 | 升级了大版本(如 v5→v6) | 查升级指南,API 可能有 breaking change |
| 生成很慢 | Schema 复杂、model 多 | 正常现象,Prisma 7 比 5 快 70% |
终极方案:全清重建
如果以上都试了还是不行:
# 1. 删掉所有依赖和生成产物
rm -rf node_modules
rm -rf node_modules/.prisma # 确保清干净
rm -rf prisma/migrations # 原型阶段可以清
# 2. 重装
npm install
npm install prisma --save-dev
npm install @prisma/client
# 3. 重新 generate
npx prisma generate
预防
- 每次改 Schema 后记得
npx prisma migrate dev(它会自动 generate),养成习惯 - 或在 VS Code 里配一个 Task:Ctrl+Shift+B 就跑 generate
- 版本号用
^5.18.0或精确锁定5.18.0,避免 npm 自动升级导致版本不一致