{T}

Prisma 版本升级指南:从 4 到 5

概述

Prisma 主版本升级涉及 Breaking Changes、依赖环境要求和 API 变更。本文以 Prisma 4 → 5 为例,系统讲解版本升级的完整流程、新特性、常见问题及回滚方案。

前置知识

学习目标

  1. 掌握获取版本更新信息的多种途径
  2. 理解 Prisma 5 的新特性与 Breaking Changes
  3. 熟练执行从 Prisma 4 到 5 的完整升级流程
  4. 能够处理升级过程中的常见兼容性问题

一、版本升级流程

图表渲染中…

二、获取版本更新

npm 工具

bash
# 检查过时依赖
npm outdated

# 使用 npm-check-updates(推荐)
ncu                          # 查看所有可更新依赖
ncu -f prisma,@prisma/client # 只看 Prisma 相关
ncu -u                       # 更新 package.json
ncu -i                       # 交互式选择

其他途径

  • GitHub Releases:https://github.com/prisma/prisma/releases
  • 官方 Change Log:https://www.prisma.io/docs
  • 升级指南:https://www.prisma.io/docs/guides/upgrade-guides

三、Prisma 5 主要变更

环境要求变更

依赖项Prisma 4Prisma 5
Node.js14.x, 16.x16.x, 18.x, 20.x
TypeScript4.x5.x
PostgreSQL14.x15.x, 16.x

新增特性

typescript
// 特性一:select 支持数组形式
const result = await prisma.user.findMany({
  select: ['id', 'name', 'email'],  // Prisma 5 新语法
});

// 特性二:多列对比
const products = await prisma.product.findMany({
  where: {
    price: { gt: prisma.product.fields.salePrice },
  },
});

性能改进

  • 查询优化:减少数据库往返次数,优化 JOIN 查询
  • 连接池优化:更高效的连接管理,提升并发性能
  • 类型生成优化:更快的 prisma generate,更小的生成文件

Breaking Changes 总结

类型影响处理方式
Node.js 14 不再支持运行环境不兼容升级到 Node.js 16+
TypeScript 5.x 要求类型推断变化升级 TypeScript
废弃 API 移除编译报错替换为新 API
配置格式变更Schema 解析失败更新 schema.prisma

四、升级实战步骤

升级前准备

bash
# 1. 检查环境
node -v          # 确保 >= 16
npx prisma -v    # 查看当前版本

# 2. 备份项目
git add . && git commit -m "chore: backup before Prisma 5 upgrade"
git branch backup-prisma-4

执行升级

bash
# 更新 Prisma 包
pnpm update @prisma/client@5
pnpm update -D prisma@5

# 必须:重新生成类型文件
npx prisma generate

# 验证
pnpm build
pnpm start:dev
pnpm test

一键升级脚本

bash
#!/bin/bash
echo "=== Prisma 4 → 5 升级 ==="

NODE_VERSION=$(node -v | cut -d 'v' -f 2 | cut -d '.' -f 1)
if [ "$NODE_VERSION" -lt 16 ]; then
    echo "错误:需要 Node.js 16+"; exit 1
fi

pnpm update @prisma/client@5 && pnpm update -D prisma@5
npx prisma generate
pnpm build

if [ $? -eq 0 ]; then
    echo "升级成功"
else
    echo "构建失败,请检查错误"
fi

五、常见问题解决

找不到 Prisma Client 类型

bash
# 错误:Cannot find module '@prisma/client/index'
# 原因:更新后未重新生成类型
npx prisma generate

Node.js 版本不兼容

bash
# 错误:The engine "node" is incompatible
nvm install 18 && nvm use 18

TypeScript 类型错误

bash
# 错误:'PrismaClient' refers to a value, but is being used as a type
npm install -D typescript@5

依赖冲突

bash
# 清理后重新安装
rm -rf node_modules pnpm-lock.yaml
pnpm install
npx prisma generate

迁移文件不兼容

bash
npx prisma migrate status          # 检查迁移状态
npx prisma migrate dev --name init # 重新生成迁移
npx prisma migrate reset           # 重置(会清空数据)

六、回滚方案

bash
# 恢复 package.json 和锁文件
git checkout package.json pnpm-lock.yaml

# 重新安装依赖
pnpm install

# 重新生成 Prisma Client
npx prisma generate

# 或直接切换到备份分支
git checkout backup-prisma-4

最佳实践

升级前检查清单

类别检查项
环境Node.js 版本符合要求;包管理器版本最新
备份提交代码到 Git;创建备份分支
信息阅读 Change Log;记录 Breaking Changes
计划确定升级顺序;准备回滚方案;通知团队

升级后验证清单

类别验证项
编译TypeScript 编译通过;ESLint 无报错;项目构建成功
运行开发服务器启动正常;数据库连接正常;API 响应正常
功能CRUD 操作正常;关系查询正常;事务处理正常
性能响应时间正常;内存占用正常

命令速查

操作命令
检查更新ncu
更新指定包ncu -f prisma,@prisma/client -u
生成类型npx prisma generate
检查版本npx prisma -v
一键升级pnpm update @prisma/client@5 && pnpm update -D prisma@5 && npx prisma generate

延伸阅读


上一篇:Prisma 实体关系定义详解 下一篇:Prisma 数据库同步与迁移命令详解