生成 Prisma Client
Prisma Client 是一个自动生成的数据库客户端,它针对您的数据库模式量身定制。默认情况下,Prisma Client 会生成到 node_modules/.prisma/client
文件夹中,但 您可以指定一个自定义位置。
要生成和实例化 Prisma Client
-
确保您的机器上安装了 Prisma CLI。
-
在您的 Prisma schema 中添加以下
generator
定义generator client {
provider = "prisma-client-js"
} -
安装
@prisma/client
npm 包npm install @prisma/client
警告我们建议您将 两个
prisma
和@prisma/client
包保持同步,以避免任何意外错误或行为。 -
使用以下命令生成 Prisma Client
prisma generate
-
您现在可以在您的代码中 实例化 Prisma Client
- TypeScript
- JavaScript
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 schema 进行任何更改后重新运行
prisma generate
命令,以更新生成的 Prisma Client 代码。
以下是生成 Prisma Client 的典型工作流程的图形说明
还要注意,当您安装 @prisma/client
npm 包时,prisma generate
会自动调用。因此,当您最初设置 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 的代码都会更改
.prisma
文件夹不受 pruning 在 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"
}
在为该 schema 文件运行 prisma generate
后,Prisma Client 包将位于
./src/generated/client
要从自定义位置导入 PrismaClient
(例如,从名为 ./src/script.ts
的文件导入),请执行以下操作
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/client
的 postinstall
钩子中生成 Prisma Client
@prisma/client
包定义了自己的 postinstall
钩子,该钩子在安装该包时执行。此钩子调用 prisma generate
命令,该命令反过来将 Prisma Client 代码生成到默认位置 node_modules/.prisma/client
。请注意,这需要 prisma
CLI 可用,无论是作为本地依赖项还是作为全局安装。建议始终将 prisma
包安装为开发依赖项,使用 npm install prisma --save-dev
,以避免版本控制冲突。