跳到主要内容

生成 Prisma Client

Prisma Client 是一个根据你的数据库 schema 定制生成的数据库客户端。默认情况下,Prisma Client 会被生成到 node_modules/.prisma/client 文件夹中,但我们强烈建议你指定一个输出位置

警告

在 Prisma ORM 7 中,Prisma Client 将不再默认生成到 node_modules 中,并且将要求定义一个输出路径。在下方了解如何定义输出路径

生成和实例化 Prisma Client

  1. 确保你的机器上已安装 Prisma CLI

    npm install prisma --save-dev
  2. 将以下 generator 定义添加到你的 Prisma schema 中

    generator client {
    provider = "prisma-client-js"
    output = "app/generated/prisma/client"
    }
    注意

    你可以自由定制输出位置以匹配你的应用程序。常见的目录包括 appsrc,甚至是项目的根目录。

  3. 安装 @prisma/client npm 包

    npm install @prisma/client
  4. 使用以下命令生成 Prisma Client

    prisma generate
  5. 你现在可以在你的代码中实例化 Prisma Client

    import { PrismaClient } from 'app/generated/prisma/client'
    const prisma = new PrismaClient()
    // use `prisma` in your application to read and write data in your DB

重要提示:每次修改 Prisma schema 后,都需要重新运行 prisma generate 命令来更新生成的 Prisma Client 代码。

这是生成 Prisma Client 的典型工作流程的图形说明

Graphical illustration of the typical workflow for generation of Prisma Client

Prisma Client 的位置

警告

我们强烈建议你定义一个自定义的 output 路径。在 Prisma ORM 6.6.0 版本中,未定义 output 路径会产生警告。在 Prisma ORM 7 中,该字段将是必填项。

使用自定义 output 路径

你还可以在 generator 配置中指定自定义 output 路径,例如(假设你的 schema.prisma 文件位于默认的 prisma 子文件夹中)

generator client {
provider = "prisma-client-js"
output = "../src/generated/client"
}

运行 prisma generate 命令生成该 schema 文件后,Prisma Client 包将位于

./src/generated/client

要从自定义位置(例如,从名为 ./src/script.ts 的文件)导入 PrismaClient

import { PrismaClient } from './generated/client'
注意

为了更好地兼容 ECMAScript modules (ESM) 并确保 Prisma ORM 在不同 Node.js 运行时中的行为一致,你还可以使用 prisma-client 生成器(预览版)。此生成器专门设计用于解决模块解析和运行时差异带来的常见挑战,提供更顺畅的集成体验并减少与 bundlers 的冲突。

@prisma/client npm 包

@prisma/client npm 包包含两个关键部分

  • @prisma/client 模块本身,它仅在你重新安装包时更改
  • .prisma/client 文件夹,这是根据你的 schema 生成的唯一 Prisma Client 的默认位置

@prisma/client/index.d.ts 导出 .prisma/client

export * from '.prisma/client'

这意味着你仍然可以在自己的 .ts 文件中导入 @prisma/client

import { PrismaClient } from '@prisma/client'

Prisma Client 是根据你的 Prisma schema 生成的,并且对你的项目而言是唯一的。每次你更改 schema(例如,通过执行 schema 迁移)并运行 prisma generate 命令时,Prisma Client 的代码都会随之更改

The .prisma and @prisma folders

.prisma 文件夹不受 Node.js 包管理器中的 pruning 操作影响。