如何将Prisma Schema转换为GraphQL Schema?避免重复编写
自动将Prisma Schema转换为GraphQL Schema的方案
核心思路:用Prisma生成器工具自动同步类型
无需手动编写GraphQL SDL,通过社区工具直接从Prisma Schema生成对应GraphQL类型,彻底规避类型不匹配和重复劳作的问题。
方案1:使用prisma-graphql-type-generator(直接生成SDL)
这是专门针对Prisma到GraphQL类型转换的工具,步骤简单直接:
- 安装依赖:
npm install prisma-graphql-type-generator --save-dev
- 在
prisma/schema.prisma中添加生成器配置:
generator graphql { provider = "prisma-graphql-type-generator" output = "../src/graphql/schemas/generated/" # 自定义生成文件的输出路径 }
- 执行生成命令:
prisma generate
执行后会自动在指定路径生成完整的GraphQL类型文件,自动完成类型映射(比如Prisma的Int @db.UnsignedInt转为BigInt!,DateTime转为String!)、关联关系转换(如author[]转为[Author]!),完全匹配你给出的示例格式。
方案2:结合GraphQL Code Generator(更灵活的自定义控制)
如果需要添加自定义GraphQL指令、调整字段映射规则,可搭配GraphQL Code Generator:
- 安装依赖:
npm install @graphql-codegen/cli @graphql-codegen/typescript @graphql-codegen/typescript-resolvers --save-dev
- 创建
codegen.ts配置文件:
import type { CodegenConfig } from '@graphql-codegen/cli'; const config: CodegenConfig = { schema: './src/graphql/schemas/base.graphql', // 你的基础GraphQL骨架文件 generates: { './src/graphql/generated/': { preset: 'client', plugins: [], config: { prismaClientPath: '@prisma/client', // 关联Prisma Client的类型定义 useIndexSignature: true } } } }; export default config;
- 定义一次基础GraphQL模型骨架后,执行同步命令:
npx graphql-codegen
这种方式既能保留自定义的GraphQL逻辑,又能自动同步Prisma Schema的类型变更。
关键注意事项
- 每次修改Prisma Schema后,只需执行对应生成命令,即可自动更新GraphQL类型,无需手动修改。
- 可通过生成器的配置项自定义类型映射,比如将特定Prisma类型转为自定义GraphQL标量。
内容的提问来源于stack exchange,提问作者Kamas Lau
相关产品推荐
相关产品推荐

