# 生成 Prisma 客户端

Prisma Client 是一个根据你数据库结构自动生成的数据库客户端。 默认情况下，它会生成到 `node_modules/.prisma/client` 目录中。但强烈建议你自定义[输出路径](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/generating-prisma-client#using-a-custom-output-path)。

{% hint style="warning" %}

## 注意

在 Prisma ORM v7 中，如果不指定 `output`，Prisma Client 将不会自动生成到 `node_modules`，因此必须[定义输出路径](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/generating-prisma-client#using-a-custom-output-path)。
{% endhint %}

## 生成 Prisma Client

{% stepper %}
{% step %}
确保你已经安装了 Prisma CLI

```shellscript
npm install prisma --save-dev
```

{% endstep %}

{% step %}
在你的 `schema.prisma` 文件中添加 `generator` 配置。例如：

```prisma
generator client {
  provider = "prisma-client-js"   // 或新版 generator
  output   = "app/generated/prisma/client"
  // 这里的 output 路径你可以按项目结构自由设定 (例如 app/、src/、项目根目录等都可以) 。
}
```

{% endstep %}

{% step %}
安装 `@prisma/client` npm 包：

```shellscript
npm install @prisma/client
```

{% endstep %}

{% step %}
使用以下命令生成 Prisma 客户端：

```shellscript
npx prisma generate
```

{% endstep %}

{% step %}
然后你就可以在代码中导入并实例化 Prisma Client 了。例如 (假设你指定的是自定义路径)：

```javascript
import { PrismaClient } from "app/generated/prisma/client";
const prisma = new PrismaClient();
```

{% endstep %}
{% endstepper %}

{% hint style="info" %}

## 重要提示

每次你对 Prisma schema 做修改后 (例如修改 model、字段、关系等)，都需要重新运行 `prisma generate`，以更新生成的 Prisma Client 代码。
{% endhint %}

<figure><img src="https://352339822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0XVn6YFH4LvEY7Oe56ip%2Fuploads%2F56H5OKfaiJKnaWZzVUiH%2Fimage.png?alt=media&#x26;token=66702ec8-1434-4182-9e52-a685528558fe" alt=""><figcaption><p>Prisma Client 生成典型工作流程的图示</p></figcaption></figure>

### Prisma 客户端的位置

{% hint style="danger" %}

## 警告

我们强烈建议您定义自定义`output`路径。在 Prisma ORM 版本中`6.6.0`，未定义`output`路径会导致警告。在 Prisma ORM 7 中，该字段为必填项。
{% endhint %}

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

要从自定义位置导入`PrismaClient`（例如，从名为 .txt 的文件导入`./src/script.ts`）：

## 加载环境变量

要在 Prisma 应用程序中加载环境变量，您可以使用该`prisma.config.ts`文件以及`.env`来自 . 的辅助函数`prisma/config`。这种方法提供了更好的类型安全性和配置管理。

{% stepper %}
{% step %}
首先，安装所需的依赖项：

```
npm install dotenv --save-dev
```

{% endstep %}

{% step %}
在项目根目录下创建一个`.env`文件

```
DATABASE_URL="your_database_connection_string_here"
```

{% endstep %}

{% step %}
更新`prisma.config.ts`项目根目录下的文件：

```typescript
import "dotenv/config";
import { defineConfig, env } from "prisma/config";

export default defineConfig({
   schema: "prisma/schema.prisma",
   migrations: {
     path: "prisma/migrations"
   },
   datasource: {
      url: env("DATABASE_URL"),
   },
});
```

{% endstep %}
{% endstepper %}

## npm `@prisma/client` 包 和生成内容结构

`@prisma/client` 由两个主要部分组成：

* 模块`@prisma/client`本身只有在重新安装软件包时才会发生变化。
* 该`.prisma/client`文件夹是存放根据您的架构生成的唯一 Prisma 客户端的[默认位置。](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/generating-prisma-client#using-a-custom-output-path)

```typescript
export * from '.prisma/client'
```

这意味着你任然需要导入`@prisma/client` 自己的.ts文件：

```typescript
import { PrismaClient } from '@prisma/client'
```

Prisma Client 由您的 Prisma schema 生成，并且对您的项目而言是唯一的。每次您更改 schema（例如，通过执行[schema 迁移](https://www.prisma.io/docs/orm/prisma-migrate)）并运行`prisma generate`Prisma Client 时，其代码都会发生变化：&#x20;

<figure><img src="https://352339822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0XVn6YFH4LvEY7Oe56ip%2Fuploads%2Fop6v4xs6dSCqv7Xt6e3j%2Fimage.png?alt=media&#x26;token=5ae7e8d1-810d-4ff7-ac20-c0294d0dfca9" alt=""><figcaption></figcaption></figure>
