Prisma 开发需要熟练掌握 19 个 CLI 命令

一、简介

以下是一个开发者的使用 Prisma 的架构图,从这张图可以宏观的观察 Prisma 的架构设计:

Prisma CLI 是从命令行与 Prisma 项目交互的主要方式。它可以初始化新的项目资产,生成 Prisma 客户端,并通过内省分析现有的数据库结构,以自动创建您的应用程序模型。

二、查看所有 CLI

ts 复制代码
npx prisma --help

Usage

  $ prisma [command]
Commands

            init   Set up Prisma for your app
        generate   Generate artifacts (e.g. Prisma Client)
              db   Manage your database schema and lifecycle
         migrate   Migrate your database
          studio   Browse your data with Prisma Studio
        validate   Validate your Prisma schema
          format   Format your Prisma schema
         version   Displays Prisma version info

Flags

     --preview-feature   Run Preview Prisma commands
     --help, -h          Show additional information about a command

如果阅读过这自己写过 CLI 工具,对这种 CLI 设计应该是一目了然, Primsa 的命令不多,主要是参数不多,也很很容易理解。

三、prisma 命令

命令 描述
init 初始化项目和配置文件
generate 生成客户端
introspect 从数据库生成客户端
validate 检验Prisma Schema 文件
format 格式化 Prisma Scheam 文件

四、primsa db

命令 描述
db pull 提取模型并同步到 Prisma 模型,生成 Prisma Client新的客户端
db push 将 Prisma 数据模型中的更改应用到数据库,即将数据模型同步到数据库中。
db seed 使用数据填充脚本或种子数据文件来初始化数据库,将初始数据插入到数据库中。、
db execute 执行原始 SQL 查询或命令以与数据库交互。

五、迁移

命令 描述
migrate dev 在开发模式下运行迁移。
migrate reset 重置数据库,将数据库恢复到初始状态
migrate deploy 部署迁移,将已生成的迁移文件应用到数据库以更新模。
migrate resolve 解决冲突,手动解决与数据库迁移相关的冲突或问题
migrate status 显示数据库状态,检查当前数据库与迁移历史的一致性。
migrate diff 生成数据库模式的变更差异,与已应用的迁移历史进行比较。

六、studio

studio 运行命令,npx studio在 5500 端口就可以打开了。studio 是一个 web 网页,在晚分为两个部分

6.1)模型列表页

包含 Prisma 中所有的模型文件列表,包含最近使用过的模型。

6.2)模型表页

模型表页面中,包含模型表的数据,可是进行一些基础操作,过滤,添加新的数据,查看跳转关联表数据,支持多模型的 tab 切换。

七、package.json 中自定义一些内容

json 复制代码
"prisma": {
  "schema": "./custom-path-to-schema/schema.prisma",
  "seed": "node ./prisma/seed.js"
}
  • schema 字段自定义 primsa 文件位置。
  • seed 自定义初始化种子文件命令。

八、源码

这里为什么要先看源码,其实有了源码,多了一个层次了解 Prisma CLI 干了什么事情。初学者在使用 Prisma 容易忘记 Primsa 的命令,和它有哪些作用,在看了源码之后,可以了解 Prisma 是如何设计这些命令的。多几个维度去熟悉 Prisma 命令, 源码阅读是一个好的习惯。

ts 复制代码
async function main(): Promise<number> {
  detectPrisma1()

  const cli = CLI.new(
    {
      init: Init.new(),
      migrate: MigrateCommand.new({
        dev: MigrateDev.new(),
        status: MigrateStatus.new(),
        resolve: MigrateResolve.new(),
        reset: MigrateReset.new(),
        deploy: MigrateDeploy.new(),
        diff: MigrateDiff.new(),
      }),
      db: DbCommand.new({
        execute: DbExecute.new(),
        pull: DbPull.new(),
        push: DbPush.new(),
        // drop: DbDrop.new(),
        seed: DbSeed.new(),
      }),
      introspect: DbPull.new(),
      studio: Studio.new(),
      generate: Generate.new(),
      version: Version.new(),
      validate: Validate.new(),
      format: Format.new(),
      telemetry: Telemetry.new(),
    },
    [
      'version',
      'init',
      'migrate',
      'db',
      'introspect',
      'studio',
      'generate',
      'validate',
      'format',
      'doctor',
      'telemetry',
    ],
  )

  const result = await cli.parse(commandArray)

  const checkResult = await runCheckpointClientCheck({
    command: redactedCommandAsString,
    isPrismaInstalledGlobally,
    schemaPath: args['--schema'],
    telemetryInformation: args['--telemetry-information'],
    version: packageJson.version,
  })
  const shouldHide = process.env.PRISMA_HIDE_UPDATE_MESSAGE
  if (checkResult && checkResult.status === 'ok' && checkResult.data.outdated && !shouldHide) {
    printUpdateMessage(checkResult)
  }

  return 0
}
if (eval('require.main === module')) {
  main()
    .then((code) => {
      if (code !== 0) {
        process.exit(code)
      }
    })
    .catch((err) => {
      if (typeof err[Symbol.iterator] === 'function') {
        for (const individualError of err) {
          handleIndividualError(individualError)
        }
      } else {
        handleIndividualError(err)
      }
    })
}

CLI.new 函数中参数提供了顶层对象就是能够使用顶层 Primsa cli 命令,migrate 和 db 有自己的子命令。

九、小结

本文主要讲解 Prisma CLI 的诸多命令,并从源码的角度观察 CLI 的设计,其目的就是快的去熟悉 Prisma CLI 的设计, 理解了之后练习 Primsa 命令行工具九可以通关了。

相关推荐
少寒3 分钟前
深入理解JavaScript Promise:异步编程的基石
前端·javascript
tecwlcvi3235 分钟前
安卓版谷歌地图,Google地图高清版,谷歌地球,谷歌翻译,谷歌(Chrome)浏览器,手机版Edge,浏览器等安卓版浏览器下载
前端·chrome·edge
czlczl200209256 分钟前
SpringBoot中web请求路径匹配的两种风格
java·前端·spring boot
bigdata-rookie8 分钟前
Scala 泛型
开发语言·后端·scala
开心猴爷9 分钟前
HTTPS Everywhere 时代的抓包挑战,从加密流量解析到底层数据流捕获的全流程方案
后端
2022.11.7始学前端13 分钟前
n8n第四节 表单触发器:让问卷提交自动触发企微消息推送
java·前端·数据库·n8n
m0_7400437313 分钟前
Axios 请求示例 res.data.data
前端·javascript·vue.js
程序员小寒14 分钟前
超详细的 EventLoop 解读及模拟实现
前端·javascript
卓码软件测评16 分钟前
【第三方CNAS软件测试机构:Gatling中的资源监控_实时收集服务器CPU、内存、磁盘I/O和网络指标】
后端·测试工具·测试用例·scala·压力测试
冴羽16 分钟前
太好看了!3 个动漫变真人 Nano Banana Pro 提示词
前端·人工智能·aigc