Prisma CLI 使用指南服务初始化、prisma.yml 配置与 HTTP 代理基于 prisma1 仓库源码解析【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址: https://gitcode.com/gh_mirrors/pr/prisma1Prisma CLI 是管理 Prisma 数据库服务Database-as-a-Service的主要命令行工具负责服务的初始化、数据模型datamodel的部署、种子数据导入导出、订阅配置等全生命周期操作。本篇指南以 Prisma 1.x 官方文档《CLI Command Reference — Overview》为核心骨架结合本仓库gh_mirrors/pr/prisma1中cli/packages下的 TypeScript 源码实现系统讲解 CLI 的安装与初始化流程、prisma.yml服务定义文件的结构与变量机制以及企业内网环境下 CLI 的 HTTP 代理配置帮助读者掌握一套完整可用的 Prisma 服务开发与部署工作流。CLI 在 Prisma 架构中的角色Prisma CLI 是开发者与 Prisma 数据库服务之间的核心交互界面。从 CLI 官方 Overview 文档 的定义来看CLI 承担了 Prisma 服务的所有管理操作而其中最关键的两部分配置都围绕它展开服务定义文件prisma.yml定义服务的 API 端点、数据模型文件、认证密钥、订阅 webhook 与钩子hooks等全部配置。详见 prisma.yml 配置参考。数据模型datamodel基于 GraphQL SDL 编写的类型定义是数据库 schema 的根基通过deploy命令部署到 Prisma 服务。相关说明见 数据建模SDL文档。从源码结构看CLI 由多个 npm 包组成实际运行链路如下cli/packages/prisma-cli/src/index.tsCLI 的入口脚本加载prisma-cli-engine的run()启动命令框架并在启动前校验 Node 版本是否满足package.json中engines.node的约束不满足则直接报错退出。cli/packages/prisma-cli-core命令的具体实现包括init、deploy、introspect、import、export、seed、reset、playground等核心子命令。cli/packages/prisma-yml负责解析prisma.yml与全局配置~/.prisma/config.yml也是 HTTP 代理逻辑getProxyAgent的所在地。本仓库cli目录下各包的完整结构可参考 cli/packages 源码目录。快速开始安装与初始化服务全局安装根据 Overview 文档Prisma CLI 通过 npm 以全局方式安装npm install -g prisma安装完成后在终端直接运行prisma即可看到所有可用命令。本仓库对应的命令全集含参数说明位于 CLI 命令参考目录例如prisma-init 命令参考初始化新服务prisma-deploy 命令参考部署服务变更prisma-playground 命令参考打开 GraphQL Playground 调试 API使用 init 初始化服务初始化一个新服务使用init命令然后跟随交互式提示基于所选模板引导式地完成服务搭建prisma init hello-world执行后会进入交互流程需要回答一系列问题例如选择部署方式Demo Server、本地 Docker 还是远程集群选择数据库类型MySQL / PostgreSQL / MongoDB是否为本地环境生成docker-compose.yml是否自动生成 Prisma Client。从 init 命令源码 可以看到该流程的实际实现命令接受可选位置参数dirName目标目录与-e, --endpoint标志预定义服务端点若指定目录中已存在prisma.yml或datamodel.prisma命令会检测到冲突并终止src/commands/init/init.ts#L47-L68。若提供了--endpoint则跳过交互式向导直接写入最小化的prisma.yml只含endpoint与datamodel两行和一份 datamodel 样板文件MongoDB 场景会自动选用datamodel-mongo.prisma样板src/commands/init/init.ts#L74-L97。交互模式下会调用EndpointDialogcli/packages/prisma-cli-core/src/utils/EndpointDialog.ts收集端点与生成器信息最终落盘生成四类文件src/commands/init/init.ts#L155-L176prisma.yml服务定义文件datamodel.prismaGraphQL SDL 数据模型即数据库的根基docker-compose.yml本地集群时Docker 编排配置.env设置了 management secret 时保存PRISMA_MANAGEMENT_API_SECRET环境变量。初始化完成后命令会打印下一步操作提示如cd hello-world、docker-compose up -d、prisma deploy。若选择了客户端生成器还会自动执行一次prisma generatesrc/commands/init/init.ts#L245-L273。深入理解服务定义文件 prisma.yml一个完整的示例prisma.yml是 Prisma 服务的唯一配置来源。以下完整示例摘自 prisma.yml 配置参考文档覆盖了绝大部分常用配置项# REQUIRED # 服务的数据模型可指向多个文件 datamodel: - database/types.graphql - database/enums.graphql # OPTIONAL # Prisma API 的 HTTP 端点编码了三层信息 # * Prisma 服务器本例为 localhost:4466 # * 服务名本例为 myservice # * Stage本例为 dev # 注意当服务名与 stage 均为 default 时可省略 # 即 http://myserver.com/default/default 可简写为 http://myserver.com endpoint: http://localhost:4466/myservice/dev # OPTIONAL # 用于签发 JSON Web TokenJWT的密钥请求 Prisma 端点时 # 需要在 Authorization 头中携带该 token # 警告若未配置 secretPrisma API 将无认证直接可访问 secret: mysecret123 # OPTIONAL # 部署后钩子先从 .graphqlconfig 配置的端点下载 GraphQL schema # 再触发代码生成流程 hooks: post-deploy: - graphql get-schema --project db - graphql codegen # OPTIONAL # 事件订阅配置订阅查询位于 database/subscriptions/welcomeEmail.graphql # 订阅触发时通过 HTTP 调用指定 webhook subscriptions: sendWelcomeEmail: query: database/subscriptions/sendWelcomeEmail.graphql webhook: url: https://${self:custom.serverlessEndpoint}/sendWelcomeEmail headers: Authorization: ${env:MY_ENDPOINT_SECRET} # OPTIONAL # 指向一个包含 GraphQL 操作的 .graphql 文件 # 服务首次部署时会执行其中的操作种子数据 seed: import: database/seed.graphql # OPTIONAL # 自定义变量可在文件其他位置通过 ${self:custom.xxx} 引用 custom: serverlessEndpoint: https://bcdeaxokbj.execute-api.eu-west-1.amazonaws.com/dev上述配置期望的目录结构如下. ├── prisma.yml ├── database │ ├── subscriptions │ │ └── welcomeEmail.graphql │ ├── types.graphql │ └── enums.graphql └── schemas └── prisma.graphql各配置项要点解读datamodel必填可以是一个文件路径也可以是文件路径列表。这是数据库 schema 的来源配合 数据模型SDL文档 使用。endpoint可选同时编码服务器、服务名与 stage 三部分信息是deploy、info、playground等命令连接目标服务的依据。secret可选为 Prisma API 提供 JWT 认证能力。源码侧由prisma-yml包解析后注入请求头若缺失则 API 完全公开生产环境务必配置。hooks.post-deploy可选部署后执行的 shell 命令序列常用于拉取最新 schema 并触发客户端代码生成。subscriptions可选声明式事件订阅触发时回调 webhook URL可携带自定义 headers。seed可选首次部署时导入的种子数据文件也可通过deploy --no-seed跳过见下文 deploy 参数。在 prisma.yml 中使用变量变量机制允许在配置值中动态替换内容特别适合存放密钥与多 stage 开发流程中的差异化配置。变量语法为${}包裹的引用# 引用其他来源的变量 yamlKeyXYZ: ${variableSource} # 参见下方变量来源列表 otherYamlKey: ${variableSource, defaultValue} # 带默认值的写法注意变量只能用于属性值不能用于属性键因此无法用变量动态生成配置项的键名。递归自引用self:可以引用prisma.yml文件内部其他属性的值语法为self:前缀加可选的属性路径若不写路径则取整个 YAML 文件作为值subscriptions: sendWelcomeEmail: query: database/subscriptions/sendWelcomeEmail.graphql webhook: url: https://${self:custom.serverlessEndpoint}/sendWelcomeEmail custom: serverlessEndpoint: example.org该机制对prisma.yml内任意属性均生效并不局限于custom字段。环境变量引用env:引用操作系统环境变量语法为env:前缀加环境变量名。典型用途是把 webhook 的鉴权 token 放到环境变量中避免明文入库subscriptions: sendWelcomeEmail: query: database/subscriptions/sendWelcomeEmail.graphql webhook: url: https://example.org/sendWelcomeEmail headers: Authorization: ${env:MY_ENDPOINT_SECRET}变量解析的实际逻辑由 cli/packages/prisma-yml/src/Variables.ts 实现Environment.ts在加载全局与本地配置时会调用变量填充见 Environment.ts。编辑器自动补全与校验若希望在编写prisma.yml时获得自动补全与静态错误检查可以使用社区维护的 JSON Schemaschemastore 上的prismaschema目前支持 VSCode安装 Red Hat 的 vscode-yaml 插件在 VSCode 用户或工作区设置中加入yaml.schemas: { http://json.schemastore.org/prisma: prisma.yml }在prisma.yml上触发智能提示默认快捷键 CtrlSpace即可看到全部可用字段及其说明写错时编辑器会即时标红。部署数据模型从 prisma.yml 到数据库 schema配置好prisma.yml与 datamodel 之后部署服务变更使用deploy命令prisma deploydeploy 命令源码 展示了它支持的主要参数src/commands/deploy/deploy.ts#L35-L72参数简写说明--force-f接受 schema 变更可能带来的数据丢失--new-n强制进入交互模式选择集群--dry-run-d预演部署不真正执行--no-seed—首次部署时跳过种子数据导入--json-j以 JSON 格式输出--no-migrate—禁用迁移需 Prisma 1.26--env-file-e指定注入环境变量的 .env 文件路径--project-p指定 Prisma 定义文件路径--no-generate—禁用隐式客户端生成--skip-hooks—禁用部署钩子部署时CLI 会读取prisma.yml将 datamodel 与服务器上的 schema 做 diff生成迁移计划涉及破坏性变更时需显式传入--force确认数据损失。部署成功后可通过 prisma-playground 命令参考 打开 GraphQL Playground 立即验证 API。企业内网场景为 CLI 配置 HTTP 代理当开发环境处于公司防火墙之后时CLI 访问远程 Prisma 服务如api.cloud.prisma.sh可能被拦截。Prisma CLI 原生支持自定义 HTTP 代理行为与 npm CLI 的代理处理方式非常相似。通过环境变量启用代理CLI 会读取以下环境变量大小写形式均可环境变量作用与示例值HTTP_PROXY或http_proxyhttp 流量的代理地址例如http://localhost:8080HTTPS_PROXY或https_proxyhttps 流量的代理地址例如https://localhost:8080NO_PROXY或no_proxy对指定 URL 禁用代理支持 glob例如*表示全部直连使用本地代理模块快速验证如果手头没有现成代理可以用 npm 的proxy模块在本地起一个简单代理npm install -g proxy DEBUG* proxy -p 8080 HTTP_PROXYhttp://localhost:8080 HTTPS_PROXYhttps://localhost:8080 prisma deploy第一条命令安装并启动监听 8080 端口的本地代理DEBUG*用于打印详细日志第三条命令在启用代理的环境变量下执行prisma deploy验证代理链路是否打通。代理机制的源码实现代理逻辑实现在 cli/packages/prisma-yml/src/utils/getProxyAgent.ts 中核心流程如下getProxyFromURI(uri)getProxyAgent.ts#L46-L85依据目标 URI 的协议选择变量先处理NO_PROXY值为*时直接返回null全部直连否则按逗号分隔的规则列表逐一匹配主机名与端口命中则绕过代理http:协议取HTTP_PROXY || http_proxyhttps:协议依次取HTTPS_PROXY || https_proxy || HTTP_PROXY || http_proxyhttps 可回退到 http 代理变量。getProxyAgent(url)getProxyAgent.ts#L87-L105根据代理地址的协议实例化http-proxy-agentHttpProxyAgent或https-proxy-agentHttpsProxyAgent供请求发送方使用。该 agent 被实际接入到 CLI 的云端 API 请求中——在 Environment.ts 的 requestCloudApi 方法 里对https://api.cloud.prisma.sh的 GraphQL 请求会传入proxy: getProxyAgent(https://api.cloud.prisma.sh)。这意味着启用代理后prisma login、集群列表拉取、deploy到远端集群等依赖云 API 的操作都会自动走代理同理deploy等命令对具体集群端点的请求也遵循同一套代理解析规则。结语Prisma CLI 是 Prisma 服务开发与运维的一站式入口init负责引导式搭建prisma.yml承载全部服务配置deploy完成数据模型到数据库的落地而代理环境变量则保证了受限网络环境下 CLI 依然可用。理解这些核心命令与配置的底层实现本仓库 cli/packages/prisma-cli-core/src/commands 与 cli/packages/prisma-yml/src 中的源码即为权威参考能够帮助你在实际项目中更高效、更安全地使用 Prisma。其余子命令info、introspect、import、export、seed、reset、login等的详细用法可继续翻阅 CLI 命令参考目录 中对应的命令文档。【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址: https://gitcode.com/gh_mirrors/pr/prisma1创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
SMS中文使用手册实战指南:从命令到排障的存储管理核心技巧 简介:这份《SMS中文使用手册》面向水利、水文、环境工程及地表水模拟领域的学习者与工程技术人员,尤其适合刚接触SMS软件、需要系统掌握操作流程的初、中级用户。手册以中文完整翻译了SMS地表水模拟系统的核心内容,从软件综述、界面布局讲起&… · 2026/9/23 16:13:44
智能化系统工程师怎么考证?从报名学习到考试拿证,报考全攻略 智能化系统工程师是网络安全与防护领域的重要技术方向。随着智能建筑、智慧城市、智能家居快速发展,智能化系统工程师需求持续增加。如果你正在考虑考取智能化系统工程师证书,本文将从报名学习到考试拿证,做一份完整的报考攻略。
一、智能化系… · 2026/9/23 16:13:38
热溶器手写实现:3步搞定从0到1的项目搭建 热溶器手写实现:3步搞定从0到1的项目搭建 刚背完热溶器原理,脑子还是空的?很多同行都卡在这一步: 学会语法却不知怎么搭项目 。别急,今天咱们不整虚的,直接上手 手写实现 一个最小可用的热溶器控制逻辑。… · 2026/9/23 16:13:38
3个技巧搞定annoyance异常处理最佳实践 3个技巧搞定annoyance异常处理最佳实践 报错一堆看不懂 StackTrace?别慌,面试被问到异常处理最佳实践时,90% 的候选人会卡壳。今天把 annoyance… · 2026/9/23 17:30:41
Salt 网络自动化实战:用 textfsm 执行模块将设备 CLI 文本解析为结构化数据 运维配置管理后端 【免费下载链接】salt Software to automate the management and configuration of infrastructure and applications at scale. 项目地址: https://gitcode.com/gh_mirrors/sa/salt 点击查看 免费下载 Salt 提供的 textfsm 执行模块(… · 2026/9/23 17:30:34
振动光纤周界安防系统的技术瓶颈:如何解决报警孤岛与处置闭环问题 摘要:振动光纤周界预警系统已广泛应用于野外重点区域、营区周界安防场景。设备探测精度、抗干扰能力逐年提升,但在实际项目落地中,多数项目仍存在“探测可用、联动缺失”的问题。本文从技术架构角度分析传统周界安防的系统短板,并… · 2026/9/23 17:30:28
ShowDoc 中的 PSR-7 接口速查:七大 HTTP 消息接口方法与源码级实践 文档知识库后端前端 【免费下载链接】showdoc ShowDoc is a tool greatly applicable for an IT team to share documents online一个非常适合IT团队的在线API文档、技术文档工具 项目地址: https://gitcode.com/gh_mirrors/sh/showdoc 点击查看 免费下载 本文以 S… · 2026/9/23 17:30:28
Airbyte Marketo Source Connector 深度解析:核心流、批量导出机制与增量同步实现 数据工程数据集成ETL后端大数据 【免费下载链接】airbyte Open-source data movement for ELT pipelines and AI agents — from APIs, databases & files to warehouses, lakes, and AI applications. Both self-hosted and Cloud. 项目地址: https://gitcode.… · 2026/9/23 17:30:21
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29