跳到主要内容

生成 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"
}

在为该 schema 文件运行 prisma generate 后,Prisma Client 包将位于

./src/generated/client

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

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

为了提高与 ECMAScript 模块 (ESM) 的兼容性,并确保 Prisma ORM 在不同 Node.js 运行时中的行为一致,您还可以使用 prisma-client 生成器(预览版)。此生成器专门用于处理模块解析和运行时变化的常见挑战,提供更顺畅的集成体验,并减少与打包器的摩擦。

@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 的影响。