You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prisma 7在Turborepo Monorepo中配置经典ORM的正确方案

Prisma 7 + Turborepo Monorepo 经典ORM配置指南

1. schema.prisma 正确写法

移除原datasource块中的url属性,仅保留数据库provider;generator部分保持经典客户端配置,无需引入Accelerate:

// packages/db/prisma/schema.prisma
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql" // 替换为你的数据库类型(mysql/sqlite等)
  // 注意:url 已移至 prisma.config.ts,此处不再配置
}

// 你的模型定义示例
model User {
  id    String @id @default(cuid())
  name  String?
  email String @unique
}

2. prisma.config.ts 配置(经典ORM必需)

必须保留该文件,用于配置数据库连接信息与Node适配器(替代原schema中的url):

// packages/db/prisma/prisma.config.ts
import { defineConfig } from '@prisma/client'
import { PrismaAdapter } from '@prisma/adapter-node'

export default defineConfig({
  datasourceUrl: process.env.DATABASE_URL!,
  adapter: PrismaAdapter(), // 启用经典ORM引擎,无需Accelerate
})

注意:确保已安装适配依赖:npm install @prisma/adapter-node

3. client.ts 编写(单例模式)

在packages/db目录下创建client.ts,导出全局单例PrismaClient实例,避免Next.js开发环境重复初始化:

// packages/db/client.ts
import { PrismaClient } from '@prisma/client'

const prismaClientSingleton = () => {
  return new PrismaClient({
    // 可选:开启日志便于调试
    log: ['query', 'info', 'warn', 'error'],
  })
}

declare global {
  var prisma: undefined | ReturnType<typeof prismaClientSingleton>
}

export const prisma = globalThis.prisma ?? prismaClientSingleton()

if (process.env.NODE_ENV !== 'production') globalThis.prisma = prisma

4. 配置@repo/db导入支持

步骤1:配置packages/db的package.json

设置包名,并通过exports字段指定入口:

// packages/db/package.json
{
  "name": "@repo/db",
  "version": "0.0.1",
  "type": "module",
  "exports": {
    ".": "./client.ts"
  },
  "scripts": {
    "generate": "prisma generate",
    "migrate": "prisma migrate dev"
  },
  "dependencies": {
    "@prisma/adapter-node": "^7.0.0",
    "@prisma/client": "^7.0.0"
  },
  "devDependencies": {
    "prisma": "^7.0.0"
  }
}

步骤2:配置根目录tsconfig.json

添加路径映射,让monorepo内的应用能识别@repo/db:

// tsconfig.json
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@repo/db": ["packages/db/client.ts"]
    }
  }
}

如果是Next.js应用,额外在next.config.js中添加配置:

// apps/your-next-app/next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  transpilePackages: ['@repo/db'],
  webpack: (config) => {
    config.resolve.alias['@repo/db'] = require.resolve('@repo/db')
    return config
  },
}

module.exports = nextConfig

关于prisma.config.ts的必要性

必须保留该文件,Prisma 7已将数据源连接配置(原schema中的url)从schema.prisma迁移至prisma.config.ts,无论是使用经典ORM还是Accelerate,都需要通过该文件配置数据源信息。

内容的提问来源于stack exchange,提问作者Roodius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 22:33:11