生成器
一个 Prisma schema 可以有一个或多个生成器,由 generator
块表示
generator client {
provider = "prisma-client-js"
output = "./generated/prisma-client-js"
}
当你运行 prisma generate
命令时,生成器决定创建哪些资源。主要属性 provider
定义了创建哪个 **Prisma Client (特定语言)** - 目前,只有 prisma-client-js
可用。或者,你可以定义任何遵循我们生成器规范的 npm 包。此外,你可以选择使用 output
为生成的资源定义自定义输出文件夹。
Prisma Client: prisma-client-js
Prisma 的 JavaScript Client 的生成器接受多个附加属性
previewFeatures
: 预览功能 以包含binaryTargets
: `prisma-client-js` 的引擎二进制目标(例如,如果你部署到 Ubuntu 18+,则为 `debian-openssl-1.1.x`;如果你在本地工作,则为 `native`)
generator client {
provider = "prisma-client-js"
previewFeatures = ["sample-preview-feature"]
binaryTargets = ["linux-musl"]
}
二进制目标
Prisma Client JS (`prisma-client-js`) 使用多个 引擎。引擎用 Rust 实现,并以可执行的、平台相关的引擎文件的形式被 Prisma Client 使用。根据你执行代码的平台,你需要正确的文件。“二进制目标”用于定义目标平台应存在的哪些文件。
当 部署 你的应用程序到生产环境时,正确的文件尤为重要,因为生产环境通常与你的本地开发环境不同。
`native` 二进制目标
`native` 二进制目标是特殊的。它不映射到具体的操作系统。相反,当 `native` 在 `binaryTargets` 中指定时,Prisma Client 会检测*当前*操作系统,并自动为其指定正确的二进制目标。
例如,假设你正在运行 **macOS**,并且你指定了以下生成器
generator client {
provider = "prisma-client-js"
binaryTargets = ["native"]
}
在这种情况下,Prisma Client 检测你的操作系统,并根据 支持的操作系统列表 找到适合它的二进制文件。如果你使用 macOS Intel x86 (`darwin`),那么将选择为 `darwin` 编译的二进制文件。如果你使用 macOS ARM64 (`darwin-arm64`),那么将选择为 `darwin-arm64` 编译的二进制文件。
**注意**: `native` 二进制目标是默认的。如果你希望包含额外的 二进制目标 以部署到不同的环境,你可以显式地设置它。
社区生成器
如果你使用 prismaSchemaFolder
预览功能来管理多个 schema 文件,那么现有的或新的生成器都不应受到影响,除非生成器手动读取 schema。
以下是社区创建的生成器列表。
prisma-dbml-generator
: 将 Prisma schema 转换为 数据库标记语言 (DBML),以便于进行可视化表示prisma-docs-generator
: 为 Prisma Client 生成单独的 API 参考prisma-json-schema-generator
: 将 Prisma schema 转换为 JSON schemaprisma-json-types-generator
: 为所有数据库添加对 强类型Json
字段的支持。它在 `prisma-client-js` 输出上运行,并更改 json 字段以匹配你提供的类型。帮助进行代码生成、智能感知等等。所有这些都不会影响任何运行时代码。typegraphql-prisma
: 为 Prisma 模型生成 TypeGraphQL CRUD 解析器typegraphql-prisma-nestjs
:typegraphql-prisma
的分支,也为 Prisma 模型生成 CRUD 解析器,但用于 NestJSprisma-typegraphql-types-gen
: 从你的 prisma 类型定义生成 TypeGraphQL 类类型和枚举,生成的输出可以编辑而不会被下一次生成覆盖,并且能够在你在编辑时搞乱类型时纠正你。nexus-prisma
: 允许通过 GraphQL Nexus 将 Prisma 模型投影到 GraphQLprisma-nestjs-graphql
: 从 Prisma Schema 生成对象类型、输入、参数等,用于@nestjs/graphql
模块prisma-appsync
: 为 AWS AppSync 生成完整的 GraphQL APIprisma-kysely
: 为 Kysely 生成类型定义,Kysely 是一个 TypeScript SQL 查询构建器。这对于从边缘运行时对数据库执行查询,或编写 Prisma 中不可能实现的更复杂的 SQL 查询,同时又不牺牲类型安全非常有用。prisma-generator-nestjs-dto
: 生成 DTO 和实体类,带有 relationconnect
和create
选项,用于 NestJS Resources 和 @nestjs/swaggerprisma-erd-generator
: 生成实体关系图prisma-generator-plantuml-erd
: 生成 PlantUML 的 ER 图的生成器。通过激活选项,也可以生成 Markdown 和 Asciidoc 文档。prisma-class-generator
: 从你的 Prisma Schema 生成可用作 DTO、Swagger Response、TypeGraphQL 等的类。zod-prisma
: 从你的 Prisma 模型创建 Zod schema。prisma-pothos-types
: 使定义基于 Prisma 的对象类型更容易,并帮助解决关系的 n+1 查询。它还集成了 Relay 插件,使定义节点和连接变得容易和高效。prisma-generator-pothos-codegen
: 自动生成输入类型(用作参数)并自动生成解耦的类型安全基础文件,使为 Pothos 从 Prisma schema 创建可自定义的对象、查询和 mutation 变得容易。可以选择从基础文件一次性生成所有 crud。prisma-joi-generator
: 从你的 Prisma schema 生成完整的 Joi schema。prisma-yup-generator
: 从你的 Prisma schema 生成完整的 Yup schema。prisma-class-validator-generator
: 从你的 Prisma schema 发出 TypeScript 模型,并准备好类验证器验证。prisma-zod-generator
: 从你的 Prisma schema 发出 Zod schema。prisma-trpc-generator
: 发出完全实现的 tRPC 路由器。prisma-json-server-generator
: 发出一个可以使用 json-server 运行的 JSON 文件。prisma-trpc-shield-generator
: 从你的 Prisma schema 发出一个 tRPC shield。prisma-custom-models-generator
: 根据 Prisma 建议,从你的 Prisma schema 发出自定义模型。nestjs-prisma-graphql-crud-gen
: 从带有 NestJS 和 Prisma 的 GraphQL schema 生成 CRUD 解析器。prisma-generator-dart
: 生成带有 to- 和 fromJson 方法的 Dart/Flutter 类文件。prisma-generator-graphql-typedef
: 生成 graphql schema。prisma-markdown
: 生成由 ERD 图及其描述组成的 markdown 文档。通过@namespace
注释标签支持 ERD 图的分页。prisma-models-graph
: 为 schema 生成双向模型图,而无需在 schema 中定义严格的关系,通过自定义 schema 注释工作。prisma-generator-fake-data
: 为你的 Prisma 模型生成看起来逼真的虚假数据,这些数据可用于单元/集成测试、演示等。prisma-generator-drizzle
: 一个 Prisma 生成器,用于轻松生成 Drizzle schema。prisma-generator-express
: 生成 Express CRUD 和路由器生成器函数。prismabox
: 从你的 Prisma 模型生成通用的 typebox schema。prisma-generator-typescript-interfaces
: 从你的 Prisma schema 生成零依赖的 TypeScript 接口。