跳至主要内容

生成 Prisma Client

Prisma Client 是一个自动生成的数据库客户端,它根据您的数据库模式进行定制。默认情况下,Prisma Client 生成到 node_modules/.prisma/client 文件夹中,但是您可以指定自定义位置

要生成和实例化 Prisma Client

  1. 确保您已在您的机器上安装了 Prisma CLI

  2. 将以下 generator 定义添加到您的 Prisma 模式

    generator client {
    provider = "prisma-client-js"
    }
  3. 安装 @prisma/client npm 包

    npm install @prisma/client
    警告

    我们建议您始终保持 prisma@prisma/client 包同步,以避免任何意外错误或行为。

  4. 使用以下命令生成 Prisma Client

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

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

重要提示:每次对 Prisma 模式进行更改(例如,执行模式迁移)后,都需要重新运行 prisma generate 命令以更新生成的 Prisma Client 代码。

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

Graphical illustration of the typical workflow for generation of Prisma Client

另请注意,当您安装 @prisma/client npm 包时,prisma generate自动调用。因此,当您最初设置 Prisma Client 时,通常可以从上面的列表中省略第三步。

@prisma/client npm 包

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

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

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

export * from '.prisma/client'

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

import { PrismaClient } from '@prisma/client'

Prisma Client 是根据您的 Prisma 模式生成的,并且对您的项目是唯一的。每次更改模式(例如,通过执行模式迁移)并运行 prisma generate 时,Prisma Client 的代码都会发生变化

The .prisma and @prisma folders

.prisma 文件夹不受 Node.js 包管理器中修剪的影响。

Prisma Client 的位置

如果您未在 generator 块中指定自定义 output,则 Prisma Client 默认生成到 ./node_modules/.prisma/client 文件夹中。维护默认位置有一些优势

使用自定义 output 路径

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

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

运行该模式文件的 prisma generate 后,Prisma Client 包将位于

./src/generated/client

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

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

为什么 Prisma Client 默认生成到 node_modules/.prisma/client

导入 Prisma Client

通过将 Prisma Client 生成到 node_modules/.prisma/client 并从 @prisma/client 导出它,您可以按如下方式在代码中导入它并实例化 Prisma Client

import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

// use `prisma` in your application to read and write data in your DB

或者

const { PrismaClient } = require('@prisma/client')

const prisma = new PrismaClient()

// use `prisma` in your application to read and write data in your DB

默认情况下将查询引擎保留在版本控制之外

Prisma Client 使用查询引擎来对数据库运行查询。此查询引擎在调用 prisma generate 时下载,并与生成的 Client 一起存储在 output 路径中。

通过将 Prisma Client 生成到 node_modules,查询引擎通常默认情况下会保留在版本控制之外,因为 node_modules 通常会被忽略版本控制。当为生成的 Prisma Client 使用自定义 output 路径时,建议将其排除在版本控制之外。对于 Git,这意味着将 output 路径添加到您的 .gitignore 文件中。

@prisma/clientpostinstall 钩子中生成 Prisma Client

@prisma/client 包定义了自己的 postinstall 钩子,该钩子在安装包时执行。此钩子调用 prisma generate 命令,该命令依次将 Prisma Client 代码生成到默认位置 node_modules/.prisma/client。请注意,这需要 prisma CLI 可用,可以作为本地依赖项或全局安装。建议始终将 prisma 包安装为开发依赖项,使用 npm install prisma --save-dev,以避免版本冲突。