Prisma Binding 代码生成(Codegen)实战指南:从 `prisma-binding` CLI 到自动化生成工作流
Prisma Binding 代码生成Codegen实战指南从prisma-bindingCLI 到自动化生成工作流【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址: https://gitcode.com/gh_mirrors/pr/prisma1prisma-binding内置的代码生成器 CLI 可以把 Prisma 服务生成的数据库 Schemaprisma.graphql一键转成类型安全的 TypeScript / JavaScript 绑定代码让你像调用本地 SDK 一样访问 Prisma GraphQL API。本文将完整讲解prisma-binding代码生成的安装、CLI 参数、GraphQL Config 集成与 v1.X 升级迁移并结合本仓库Prisma 1.x 开源实现中prisma generate命令与prisma-client-lib各语言 Generator 的源码深入说明代码生成背后的实现原理。读完本文你将能够在自己的 Prisma 项目中独立搭建并自动化“部署即生成”的绑定代码流水线。为什么需要代码生成从手写 delegate resolver 到自动生成 SDK在 Prisma 的架构中Prisma 服务会根据你的数据模型自动产出一份包含完整 CRUD API 的Prisma 数据库 Schema通常命名为prisma.graphql它定义了Query、Mutation、Subscription三个根类型。prisma-binding是针对 Prisma GraphQL API 的专用 GraphQL Binding 实现可以把它理解为 Prisma 服务的自动生成的 SDK它负责把 GraphQL 查询委托delegate给底层 Prisma 服务你不再需要在 resolver 里手写 SQL 或直接操作数据库 API大多数 resolver 只是一行委托调用详见 Prisma-Bindings 概览。而**代码生成Codegen**解决的问题是Prisma 数据库 Schema 随数据模型演进而变化手写绑定代码不现实。prisma-binding自带的生成器 CLI 可以读取prisma.graphql自动生成对应的绑定文件如binding.ts把query、mutation、exists等 API 以类型完备的方式暴露出来。安装prisma-bindingprisma-binding自带生成器 CLI需要以全局方式安装也可以作为项目依赖安装后通过npx调用。支持 npm 与 yarn 两种包管理器# 使用 npm 全局安装 npm install -g prisma-binding# 使用 yarn 全局安装 yarn global add prisma-binding安装完成后即可在任意目录下调用prisma-binding命令执行代码生成。CLI 用法与参数说明生成器的核心命令格式如下Usage: prisma-binding -i [input] -l [language] -b [outputBinding]参数别名说明类型是否必填--help-显示帮助信息boolean否--version-显示版本号boolean否--input-iprisma.graphql文件路径string是--language-l生成器语言可选typescript、javascriptstring是--outputBinding-b输出绑定文件例如binding.tsstring是一个典型的调用示例prisma-binding \ --input src/generated/prisma.graphql \ --language typescript \ --outputBinding src/generated/binding.ts需要说明的是这里--language支持typescript与javascript两种绑定代码语言。在 Prisma 生态更完整的实现中代码生成还覆盖了更多目标语言与产物在本仓库的prisma generate命令generate.ts中实际支持的 generator 包括graphql-schema、typescript-client、javascript-client、go-client、flow-client五种分别对应prisma-client-lib中导出的TypescriptGenerator、JavascriptGenerator、GoGenerator、FlowGenerator等实现见 prisma-client-lib 导出入口。因此如果你使用的是prisma generate或 GraphQL Config 生态可以按需扩展到 Go 与 Flow 等更多语言。与 GraphQL Config 集成把参数写进配置文件prisma-bindingCLI 与GraphQL Config深度集成与其在命令行中逐个传参不如在项目根目录写一个.graphqlconfig.ymlCLI 会自动读取其中的配置。例如下面的.graphqlconfig.yml定义了一个名为myapp的 projectschemaPath指向 Prisma 数据库 Schema并通过extensions.codegen声明使用prisma-binding生成器projects: myapp: schemaPath: src/generated/prisma.graphql extensions: prisma: prisma/prisma.yml codegen: - generator: prisma-binding language: typescript output: binding: src/generated/prisma.ts此时只要在包含上述.graphqlconfig.yml的目录下执行graphql codegen命令其效果等价于执行prisma-binding \ --language typescript \ --outputBinding src/generated/prisma.ts这里schemaPath指向的src/generated/prisma.graphql充当了 CLI 的--input因此命令中不再需要显式传-i。这种“配置驱动”的方式让代码生成参数与项目一起版本化可复现、可审查。在实际的 Prisma 项目里src/generated/prisma.graphql通常由 GraphQL CLI 的graphql get-schema从 Prisma 端点下载而来。完整的接入流程可参考教程 Access Prisma from a Node script using Prisma Bindings先用graphql get-schema下载数据库 Schema再基于它实例化Prisma绑定即可执行createUser、query.users、updatePost等 CRUD 调用。源码视角生成器是如何把 Schema 变成代码的为了更好地理解生成产物可以到本仓库的prisma-client-lib中查看生成器的具体实现。以 TypeScript 为例TypescriptGeneratortypescript-client.ts在构造时接收schemaGraphQLSchema与internalTypes两个输入schema通过buildSchema(schemaString)从prisma.graphql解析出的 GraphQL SchemainternalTypes由parseInternalTypes从数据模型解析出的内部类型列表。生成器内部维护了一张scalarMapping表把 GraphQL 标量映射为 TypeScript 类型typescript-client.tsGraphQL 标量TypeScript 类型IntnumberStringstringIDstring \| numberFloatnumberBooleanbooleanDateTimeInputDate \| stringDateTimeOutputstringJsonany对每个 GraphQL Object 类型生成器会输出多个变体接口/对象、输入/输出形式等并通过render()拼装最终代码renderTypedefs()输出prisma-schema.ts见 generate.ts。也就是说生成的绑定文件不仅包含委托函数还包含与数据模型对应的全部类型定义。另一个值得注意的实现细节是环境变量插值Generator基类提供静态方法replaceEnvGenerator.ts会把prisma.yml中形如${env:VAR_NAME}的占位符递归替换为process.env[VAR_NAME]。prisma generate在生成 TypeScript 客户端时会用这个方法处理endpoint与secretgenerate.ts这意味着生成的绑定代码可以在运行时从环境变量读取服务端点与密钥避免把密钥硬编码进产物。从prisma-bindingv1.X 升级graphql prepare→graphql codegenprisma-binding2.0 之前的版本基于graphql prepare命令进行生成2.0 起统一改用了graphql codegen。如果你正在使用旧版本需要按下述方式更新 Prisma 项目文件。prisma.yml把post-deploy钩子中的graphql prepare替换为graphql codegen通常还会配合graphql get-schema先拉取最新 Schema# ... other properties hooks: post-deploy: - graphql get-schema - graphql codegen.graphqlconfig.ymlprepare-binding扩展改名为codegen并把generator值改为prisma-binding同时通过output.binding声明输出文件projects: myapp: schemaPath: src/generated/prisma.graphql extensions: prisma: prisma/prisma.yml codegen: - generator: prisma-binding language: typescript output: binding: src/generated/prisma.ts作为对照旧版基于graphql prepare的.graphqlconfig.yml形如extensions.prepare-bindinggenerator: prisma-ts升级时需按上述新格式改写可参考 prisma.yml YAML 结构文档 中保留的旧式配置示例。把代码生成接入部署工作流post-deploy钩子生产可用的做法是把代码生成挂到 Prisma 的部署钩子上让绑定代码随数据模型变更自动更新。在prisma.yml中配置hooks.post-deploy每次prisma deploy成功后依次执行下载 Schema 与生成代码endpoint: http://localhost:4466/myservice/dev secret: mysecret123 hooks: post-deploy: - graphql get-schema --project db - graphql codegen该配置的完整上下文可参考 prisma.yml 概览与示例其中graphql get-schema从端点下载最新 Prisma 数据库 Schemagraphql codegen依据.graphqlconfig.yml中的codegen扩展执行绑定生成。这样团队成员每次deploy后拿到的都是与最新数据模型一致的绑定代码从源头避免“Schema 已变、绑定未更新”的错位问题。生成之后使用绑定的最小示例代码生成完成后生成的绑定文件与prisma-binding运行时配合使用。无论你使用动态绑定直接new Prisma({ typeDefs, endpoint, secret })还是静态绑定使用生成产物调用方式都是统一的委托 APIconst { Prisma } require(prisma-binding) const prisma new Prisma({ typeDefs: src/generated/prisma.graphql, endpoint: https://your-prisma-service.com/myapp/dev, secret: my-super-secret-secret, }) // 查询单个用户 prisma.query.user({ where: { id: abc } }, { name }) // 创建用户 prisma.mutation.createUser({ data: { name: Sarah } }, { id }) // 判断节点是否存在 prisma.exists.User({ id: abc, name: Sarah })query、mutation、exists以及底层request方法的完整说明见 Prisma-Bindings API 文档。这些 delegate resolver 的接口签名是(args: any, info: GraphQLResolveInfo | string): PromiseT其中info既可以是选择集字符串也可以是 GraphQL 解析器透传的GraphQLResolveInfo对象——这正是在ctx.db.query.posts({}, info)这类“一行 resolver”中委托调用得以无缝衔接info的原因示例见 Overview 文档。小结prisma-binding的代码生成能力贯穿了“Schema 下载 → 绑定生成 → resolver 委托”的完整链路你可以用prisma-bindingCLI 直接基于prisma.graphql生成 TypeScript/JavaScript 绑定也可以把生成参数沉淀进.graphqlconfig.yml交由graphql codegen统一驱动再借助prisma.yml的post-deploy钩子实现部署自动生成。本仓库源码进一步表明这套思路在prisma generate中被扩展到了 Go、Flow 等多种语言且生成器内置了环境变量插值、标量类型映射等能力为构建类型安全、可持续演进的 Prisma GraphQL 服务提供了坚实的自动化基础。【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址: https://gitcode.com/gh_mirrors/pr/prisma1创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从程序员到“脚艺人”:自嘲梗背后的转行与编程成长

从程序员到“脚艺人”:自嘲梗背后的转行与编程成长

不知道从什么时候开始,程序员圈里的自我介绍悄悄换了副面孔。以前大家张口是“我是程序员”“我是做开发的”,现在转头就变成“我是一名脚艺人”。第一次看到这个词的人基本都会愣住:脚艺人?是用脚表演杂技的那种艺人,…

2026/9/23 13:38:21 阅读更多 →
大家来找茬2性能优化保姆级教程:3招搞定高频卡顿

大家来找茬2性能优化保姆级教程:3招搞定高频卡顿

大家来找茬2性能优化保姆级教程:3招搞定高频卡顿 刚学完语法,对着空白的IDE发呆?知道怎么写循环,却不知道怎么把功能串成一个能跑的项目?这种“会写代码但搭不起架子”的困境,90%的新手都踩过。别慌,今天这篇 保姆级教程…

2026/9/23 13:38:21 阅读更多 →
aircrack源码拆解:3个性能优化点解决抓包卡顿

aircrack源码拆解:3个性能优化点解决抓包卡顿

aircrack源码拆解:3个性能优化点解决抓包卡顿 看了一堆教程还是不会写项目?别急,很多人卡在“原理懂但代码跑不通”。我见过太多人对着 Wireshark…

2026/9/23 13:38:21 阅读更多 →

最新新闻

博文写作 prompt 生产系统:六个组件让技术文不空泛可落地

博文写作 prompt 生产系统:六个组件让技术文不空泛可落地

简介:面向毕业设计或遥感图像分析任务的高分辨率航拍图像语义分割项目,基于DeepLabv3架构,提供从模型定义、数据预处理到训练评估的完整Python实现。资源包共184个文件,压缩包约477KB,其中95个py脚本为主要源码&#x…

2026/9/23 14:19:20 阅读更多 →
超表面设计:从仿真到工程实践的关键技术与应用

超表面设计:从仿真到工程实践的关键技术与应用

1. 超表面设计:从实验室走向工程实践最近两年,但凡参加过国际光学工程学会(SPIE)或者IEEE天线与传播会议的同仁,应该都注意到一个现象——超过三分之一的poster区域都被各种超表面设计占领。这种由亚波长结构单元组成的…

2026/9/23 14:19:20 阅读更多 →
uniapp在线更新实战:整包更新与资源热更新全解析

uniapp在线更新实战:整包更新与资源热更新全解析

很多人把uniapp的在线更新想简单了,以为就是调个接口提示用户去应用商店下载新版本。等真把App交到手上,测完一轮才发现,需求方要的是“打开App发现新版本,点一下按钮,进度条跑完,App自己就变成了新版本”。…

2026/9/23 14:19:20 阅读更多 →
Coil 3 ImageRequest 完全指南:构建、执行与配置图片加载请求

Coil 3 ImageRequest 完全指南:构建、执行与配置图片加载请求

Coil 3 ImageRequest 完全指南:构建、执行与配置图片加载请求 【免费下载链接】coil Image loading for Android and Compose Multiplatform. 项目地址: https://gitcode.com/gh_mirrors/co/coil ImageRequest 是 Coil 3 中描述"如何加载一张图片"…

2026/9/23 14:19:20 阅读更多 →
从零搭建DOTA2信息站:Astro+Cloudflare Workers技术选型与落地实录

从零搭建DOTA2信息站:Astro+Cloudflare Workers技术选型与落地实录

1. 从零搭建一个 DOTA2 信息站:我的完整技术选型与落地实录打 DOTA2 十几年,从 6.48 时代一路玩到现在的 7.3x,中间断断续续也做过几个小工具站。最开始只是想给自己和朋友做一个能快速查英雄胜率、看版本改动、追踪比赛结果的小页面&#xf…

2026/9/23 14:19:20 阅读更多 →
Nexus 3.70.1-02 Win64 解压即用:从零搭建私有仓库的完整指南

Nexus 3.70.1-02 Win64 解压即用:从零搭建私有仓库的完整指南

简介:Nexus 3.70.1-02 是 Sonatype 官方推出的 Windows 64 位仓库管理平台安装包,面向需要在内网搭建私有 Maven、npm、Docker 等镜像源的开发与运维人员,用于统一代理、缓存和分发依赖,解决外网拉取慢、依赖不可控等问题。压缩包…

2026/9/23 14:18:19 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →