从Nexus Framework迁移到Nexus(使用Prisma插件)指南

从Nexus Framework迁移到Nexus(使用Prisma插件)指南

nexus Code-First, Type-Safe, GraphQL Schema Construction nexus 项目地址: https://gitcode.com/gh_mirrors/ne/nexus

前言

对于正在使用Nexus Framework并希望迁移到Nexus的开发者来说,特别是那些使用了Prisma插件的用户,本文将详细介绍迁移过程中需要注意的关键点。我们将重点讲解如何保持原有功能的同时适应新的架构。

准备工作

在开始迁移前,请确保你已经完成了以下准备工作:

  1. 安装必要的依赖包:
npm install -D @prisma/cli
npm install @prisma/client
  1. 确认你使用的nexus-plugin-prisma版本是0.20或更高

插件启用方式的变化

在Nexus Framework中,我们使用简单的use方法来启用插件。但在Nexus中,我们需要直接使用makeSchemaAPI:

// 旧方式(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中,上下文类型是自动注入的。现在需要手动配置:

  1. 首先创建上下文类型定义文件:
// context.ts
import { PrismaClient } from '@prisma/client'

export type Context = {
  db: PrismaClient
}
  1. 然后在schema配置中添加上下文类型:
export const schema = makeSchema({
  sourceTypes: {
    // ...其他配置
    contextType: {
      source: require.resolve('./context'),
      alias: 'ContextModule'
    }
  },
  plugins: [/*...*/]
})

自定义标量类型配置

如果你的Prisma Schema中使用了JsonDateTime类型,需要手动配置对应的GraphQL标量:

  1. 安装依赖:
npm install graphql-scalars
  1. 配置标量映射:
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中,以下操作是自动完成的:

  1. 运行nexus dev时自动重新生成Prisma Client
  2. 修改schema.prisma并迁移数据库后自动重新生成Client

现在需要手动执行以下命令来重新生成Client:

npx prisma generate

数据库迁移命令保持不变:

npx prisma migrate dev --preview-feature

迁移后的注意事项

  1. 虽然配置方式发生了变化,但实际代码中使用nexus-plugin-prisma的方式(如t.modelt.crud调用)不需要修改
  2. 建议在开发过程中密切关注类型提示,确保所有类型都能正确解析
  3. 对于复杂的项目,建议分阶段迁移,先确保基础功能正常工作后再处理边缘情况

通过以上步骤,你应该能够顺利地将项目从Nexus Framework迁移到Nexus,同时保持Prisma插件的所有功能。如果在迁移过程中遇到问题,可以查阅相关文档或寻求社区支持。

nexus Code-First, Type-Safe, GraphQL Schema Construction nexus 项目地址: https://gitcode.com/gh_mirrors/ne/nexus

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔嫣忱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值