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
相关产品推荐
相关产品推荐

