SuperAPI AI 工具集

prisma-upgrade-v7-prisma-config

编程与开发

查看项目

更新于 10-16 04:12

技能介绍

用途

Prisma Config 是 Prisma v7 引入的集中配置文件,文件名为 prisma.config.ts,作为 Prisma CLI 的核心配置入口。它把原本写在 schema.prisma 中的数据源连接信息与迁移相关设置,统一迁移到 TypeScript 配置文件中管理。

位置

将 prisma.config.ts 放在项目根目录,即与 package.json 同级。

基本配置

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'),
  },
})

配置选项

schema

指定 Prisma schema 文件的路径:

schema: 'prisma/schema.prisma'

datasource.url

数据库连接 URL:

datasource: {
  url: env('DATABASE_URL'),
}

datasource.directUrl

直连 URL(绕过连接池):

datasource: {
  url: env('DATABASE_URL'),
  directUrl: env('DIRECT_DATABASE_URL'),
}

datasource.shadowDatabaseUrl

用于迁移的 shadow 数据库:

datasource: {
  url: env('DATABASE_URL'),
  shadowDatabaseUrl: env('SHADOW_DATABASE_URL'),
}

migrations.path

迁移文件所在目录:

migrations: {
  path: 'prisma/migrations',
}

migrations.seed

prisma db seed 使用的 seed 命令:

migrations: {
  path: 'prisma/migrations',
  seed: 'tsx prisma/seed.ts',
}

完整示例

import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'

export default defineConfig({
  // Schema location
  schema: 'prisma/schema.prisma',

  // Migration configuration
  migrations: {
    path: 'prisma/migrations',
    seed: 'tsx prisma/seed.ts',
  },

  // Database connection
  datasource: {
    url: env('DATABASE_URL'),
    directUrl: env('DIRECT_DATABASE_URL'),
    shadowDatabaseUrl: env('SHADOW_DATABASE_URL'),
  },
})

环境变量

env() 辅助函数

使用 env() 引用环境变量:

import { env } from 'prisma/config'

datasource: {
  url: env('DATABASE_URL'),
}

它提供类型安全,但不会自动加载 .env 文件。

加载 .env 文件

安装并导入 dotenv:

npm install dotenv
import 'dotenv/config'  // Must be first import
import { defineConfig, env } from 'prisma/config'

从 v6 迁移

迁移前(v6)——schema.prisma:

datasource db {
  provider  = "postgresql"
  url       = env("DATABASE_URL")
  directUrl = env("DIRECT_URL")
}

迁移后(v7)——prisma.config.ts:

import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'

export default defineConfig({
  schema: 'prisma/schema.prisma',
  datasource: {
    url: env('DATABASE_URL'),
    directUrl: env('DIRECT_URL'),
  },
})

并更新 schema.prisma:

datasource db {
  provider = "postgresql"
  // URLs now in prisma.config.ts
}

自定义配置路径

在 CLI 命令中使用 --config 标志:

prisma migrate dev --config ./config/prisma.config.ts

Monorepo 配置

import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'
import path from 'path'

export default defineConfig({
  schema: path.join(__dirname, 'packages/database/prisma/schema.prisma'),
  migrations: {
    path: path.join(__dirname, 'packages/database/prisma/migrations'),
  },
  datasource: {
    url: env('DATABASE_URL'),
  },
})

适用场景

适用于使用 Prisma v7 并需要集中管理 schema 路径、数据库连接 URL、迁移目录与 seed 命令的项目,包括需要自定义配置路径或 monorepo 结构的场景。

限制

env() 提供类型安全但不会自动加载 .env 文件,需要自行安装并导入 dotenv。资料未提供其他限制、收费或平台信息。