- 后端
- 数据库
- GraphQL
【免费下载链接】prisma1
💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated]
prisma init是 Prisma CLI 中用于初始化新数据库服务(Prisma service)的核心命令,它会在本地生成prisma.yml、数据模型(datamodel)与 GraphQL 配置文件,并通过交互式向导或--boilerplate参数帮助你选择"纯数据库服务"或"完整 GraphQL 应用"两种起步模板。本文以 Prisma 1.x 仓库中的 01-prisma-init.md 为骨架,结合 CLI 的 init.ts 实现源码,完整讲解该命令的用法、生成文件、交互流程与常见后续步骤,让读者能够据此从零初始化一个可部署的 Prisma 服务。
命令概述:prisma init做了什么
prisma init的作用是为一个新的 Prisma 数据库服务创建本地文件结构。如果执行命令时没有提供--boilerplate选项,命令会触发一个交互式向导,让你选择一种预配置的服务模板,主要有两大选项:
- Minimal setup: database-only(最小化:仅数据库):只提供一个纯 Prisma 数据库服务所需的文件;
- GraphQL server/fullstack boilerplate(GraphQL 服务/全栈模板):基于 GraphQL boilerplates 搭建一个功能完整的 GraphQL 应用骨架(可以是仅后端,也可以是全栈)。
无论选择哪种方式,初始化出的 Prisma 服务至少都会包含以下文件:
| 文件 | 用途 |
|---|---|
prisma.yml | 服务定义文件(service definition),声明 endpoint、datamodel 等核心配置 |
datamodel.graphql/datamodel.prisma | 数据模型定义文件(data model),使用 GraphQL SDL 语法描述数据库模型 |
.graphqlconfig | 遵循标准化graphql-config格式的配置文件,供 GraphQL Playground 等各类工具使用 |
版本说明:1.3 版本文档中数据模型文件写作
datamodel.graphql,而当前仓库 CLI 实现(见 boilerplate 目录)实际生成的是datamodel.prisma,二者均为 GraphQL SDL 格式,命名差异不影响用法。
如果你在命令中传入一个目录名作为参数,生成的文件会被放入以该名字新建的目录中;否则生成在当前目录。
用法与命令行参数
命令的基本用法如下:
prisma init DIRNAME [flags]其中DIRNAME为可选的目录名参数。命令支持以下 flag:
-b, --boilerplate BOILERPLATE Full URL or repo shorthand (e.g. `owner/repo`) to boilerplate GitHub repository即:
-b, --boilerplate <BOILERPLATE>:指定模板对应的 GitHub 仓库,可以传完整 URL,也可以传仓库简写(例如owner/repo)。
从源码看,Init命令(init.ts)还定义了另一个非文档化的 flag:-e, --endpoint <ENDPOINT>,用于直接指定初始服务 endpoint,从而跳过交互式向导(详见下文"非交互式初始化"小节):
static args = [ { name: 'dirName', description: 'Folder to initialize in (optional)', }, ] static flags: Flags = { endpoint: flags.string({ char: 'e', description: 'Initial service endpoint (optional)', required: false, }), }三个典型使用示例
在当前目录创建数据库服务文件结构
prisma init不传目录名,文件直接生成在当前目录下。
在指定目录database中创建文件结构
prisma init database命令会在当前目录下新建database/文件夹,并把生成的文件放入其中。
基于node-basic模板初始化 GraphQL 服务器
prisma init node-app --boilerplate node-basic--boilerplate node-basic使用仓库简写语法,CLI 会从对应的 GitHub 仓库拉取node-basic模板,在node-app/目录中搭建一个基于 Node.js 的基础 GraphQL 服务器骨架。
初始化后生成的目录结构与文件解析
无论走交互式向导还是非交互模式,init最终都会向目标目录写入文件。从 init.ts 的createdFiles输出逻辑可以看出,典型的生成结果包括:
prisma.yml Prisma service definition datamodel.prisma GraphQL SDL-based datamodel (foundation for database) docker-compose.yml Docker configuration file # 仅本地集群时生成 .env Env file including PRISMA_API_MANAGEMENT_SECRET # 设置了管理密钥时生成其中最关键的两个文件内容如下。
prisma.yml:服务定义
交互式流程生成的prisma.yml形如:
endpoint: https://eu1.prisma.sh/myworkspace/service-name/stage datamodel: datamodel.prismaendpoint:服务部署的地址,格式为https://<cluster>/<workspace>/<service>/<stage>。在 PrismaDefinition.ts 中,CLI 会通过parseEndpoint从 endpoint 中解析出 cluster、service、stage 等组成部分,并校验 endpoint 必须以http://或https://开头。datamodel:数据模型文件的相对路径。源码支持单个路径,也支持通过数组配置多个数据模型文件(见 PrismaDefinition.ts)。
如果选择的是 MongoDB,prisma.yml还会额外追加一行databaseType: document:
endpoint: ... datamodel: datamodel.prisma databaseType: document如果交互式向导中选择了代码生成器(generator),还会追加generate段。从源码的getGeneratorConfig(init.ts)可以看到生成配置的结构:
generate: - generator: <generator-name> output: ./generated/prisma-client/datamodel.prisma:初始数据模型
当前仓库内置的 datamodel.prisma 模板非常简洁:
type User { id: ID! @id name: String! }它定义了一个带@id主键的User模型,后续你可以在这个基础上扩展更多字段与关系(可参考 数据建模文档.md))。
交互式向导:从 endpoint 到 docker-compose 的完整流程
当没有提供--endpoint时,命令会走完整交互流程。核心逻辑在 init.ts 中:
- 调用
this.env.fetchClusters()拉取可用集群列表; - 构造
EndpointDialog实例(shouldAskForGenerator: true),引导用户配置 endpoint、数据库类型、是否使用已有数据库、是否本地部署、是否选择代码生成器等; - 根据结果组装
prisma.yml内容并写入; - 写入
datamodel.prisma(内容是对话框返回的results.datamodel); - 若选择本地集群且需要 docker-compose,写入 docker-compose.yml 模板;
- 若设置了管理密钥(management secret),写入
.env文件,内容为PRISMA_MANAGEMENT_API_SECRET=<secret>; - 若选择了 generator,自动执行
prisma generate生成客户端代码。
交互流程在 init.test.ts 中通过 mock inquirer 有对应测试覆盖,测试场景包括选择local本地集群,以及选择"Use existing database"(PostgreSQL 类型)两种情况,可用于理解对话框可能出现的选项。
本地模式下的 docker-compose.yml
当选择本地集群时,命令会写入一个内置的 docker-compose.yml,它定义了:
prisma-db:MySQL 5.7 数据库容器;prisma-database:prismagraphql/prisma:1.1服务器容器,通过环境变量接收SQL_CLIENT_*、SQL_INTERNAL_*、PORT等配置,并将 MySQL 作为底层存储。
因此本地模式的后续步骤通常是docker-compose up -d启动 Prisma 服务器,再执行prisma1 deploy部署服务。
非交互式初始化:--endpoint快速模式
源码中还存在一条绕过交互向导的快捷路径(init.ts):当通过-e/--endpoint提供 endpoint 时,CLI 会直接:
- 创建目标目录;
- 根据当前服务的数据库类型(
document类型使用datamodel-mongo.prisma模板,否则使用默认 datamodel.prisma)写入数据模型文件; - 写入极简的
prisma.yml:
endpoint: <endpoint> datamodel: datamodel.prisma该模式适合在脚本或 CI 中自动化初始化场景。
冲突检测与安全机制
init在写入文件前会检查目标目录,如果目录中已存在prisma.yml或datamodel.prisma,会输出冲突文件列表并终止(exit code 1),提示换一个目录名或先清理文件(见 init.ts)。仓库中还有一份被注释掉的旧实现 old.ts,其中曾提供--force与--copyflag,可作历史参考,但当前版本以新实现为准。
初始化完成后的标准操作步骤
无论是哪种模式,命令结束时都会打印"Next steps"清单,汇总如下:
- 若指定了目录名:
cd <dir>进入项目目录; - 若为本地集群模式:运行
docker-compose up -d启动本地 Prisma 服务器(若系统未安装 docker-compose,CLI 会提示安装指引); - 运行
prisma1 deploy部署你的 Prisma 服务(部署命令详见 02-prisma-deploy.md); - 若选择了 generator,
prisma generate已在初始化阶段自动执行,客户端代码输出到./generated/prisma-client/。
完成上述步骤后,你的 Prisma 数据库服务即已就绪,可以在此基础上继续编写数据模型、编写 GraphQL 解析器或集成 Prisma Client 进行数据访问。关于prisma.yml各配置项(如endpoint、datamodel、generate、seed等)的完整说明,可继续阅读 02-prisma.yml。
- 后端
- 数据库
- GraphQL
【免费下载链接】prisma1
💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated]
相关推荐
Prisma CLI 实战:使用 `prisma init` 搭建数据库服务与 GraphQL 项目脚手架
Prisma CLI 实战:使用 prisma init 搭建数据库服务与 GraphQL 项目脚手架 prisma init 是 Prisma CLI(当前仓
后端数据库GraphQLprisma init 命令详解:为 Prisma 数据库 API 搭建本地项目骨架(Prisma 1.14 CLI 参考)
prisma init 命令详解:为 Prisma 数据库 API 搭建本地项目骨架(Prisma 1.14 CLI 参考) prisma init 是 Pri
后端数据库GraphQLPrisma Boilerplate 引导:基于 GraphQL CLI 快速搭建 Prisma GraphQL 服务的完整指南
Prisma Boilerplate 引导:基于 GraphQL CLI 快速搭建 Prisma GraphQL 服务的完整指南 导读 本指南围绕 Prisma
后端数据库GraphQL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考