从Nexus Framework迁移到Nexus(使用Prisma插件)指南
前言
对于正在使用Nexus Framework并希望迁移到Nexus的开发者来说,特别是那些使用了Prisma插件的用户,本文将详细介绍迁移过程中需要注意的关键点。我们将重点讲解如何保持原有功能的同时适应新的架构。
准备工作
在开始迁移前,请确保你已经完成了以下准备工作:
- 安装必要的依赖包:
npm install -D @prisma/cli
npm install @prisma/client
- 确认你使用的
nexus-plugin-prisma
版本是0.20或更高
插件启用方式的变化
在Nexus Framework中,我们使用简单的use
方法来启用插件。但在Nexus中,我们需要直接使用makeSchema
API:
// 旧方式(Nexus Framework)
import { use } from 'nexus'
import { prisma } from 'nexus-plugin-prisma'
use(prisma())
// 新方式(Nexus)
import { makeSchema } from 'nexus'
import { nexusPrisma } from 'nexus-plugin-prisma'
export const schema = makeSchema({
plugins: [nexusPrisma()]
})
插件配置详解
启用CRUD功能
如果你在项目中使用了t.crud
方法,需要显式启用这一功能:
makeSchema({
plugins: [nexusPrisma({
experimentalCRUD: true // 显式启用CRUD功能
})]
})
配置类型支持
为了让Nexus能够识别Prisma Client的类型,需要配置sourceTypes
:
export const schema = makeSchema({
sourceTypes: {
modules: [
{
module: require.resolve('.prisma/client/index.d.ts'),
alias: "prisma",
}
]
},
plugins: [/*...*/]
})
上下文类型配置
在Nexus Framework中,上下文类型是自动注入的。现在需要手动配置:
- 首先创建上下文类型定义文件:
// context.ts
import { PrismaClient } from '@prisma/client'
export type Context = {
db: PrismaClient
}
- 然后在schema配置中添加上下文类型:
export const schema = makeSchema({
sourceTypes: {
// ...其他配置
contextType: {
source: require.resolve('./context'),
alias: 'ContextModule'
}
},
plugins: [/*...*/]
})
自定义标量类型配置
如果你的Prisma Schema中使用了Json
或DateTime
类型,需要手动配置对应的GraphQL标量:
- 安装依赖:
npm install graphql-scalars
- 配置标量映射:
import { DateTimeResolver, JSONObjectResolver } from 'graphql-scalars'
export const schema = makeSchema({
plugins: [
nexusPrisma({
// ...其他配置
scalars: {
DateTime: DateTimeResolver,
Json: new GraphQLScalarType({
...JSONObjectResolver,
name: 'Json',
description: 'JSON标量类型'
})
}
})
]
})
开发工作流的变化
在Nexus Framework中,以下操作是自动完成的:
- 运行
nexus dev
时自动重新生成Prisma Client - 修改
schema.prisma
并迁移数据库后自动重新生成Client
现在需要手动执行以下命令来重新生成Client:
npx prisma generate
数据库迁移命令保持不变:
npx prisma migrate dev --preview-feature
迁移后的注意事项
- 虽然配置方式发生了变化,但实际代码中使用
nexus-plugin-prisma
的方式(如t.model
或t.crud
调用)不需要修改 - 建议在开发过程中密切关注类型提示,确保所有类型都能正确解析
- 对于复杂的项目,建议分阶段迁移,先确保基础功能正常工作后再处理边缘情况
通过以上步骤,你应该能够顺利地将项目从Nexus Framework迁移到Nexus,同时保持Prisma插件的所有功能。如果在迁移过程中遇到问题,可以查阅相关文档或寻求社区支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考