Sveltekit中Prisma多Schema客户端配置问题求助
解决SvelteKit中多Prisma Schema客户端的两个核心问题
问题背景
在使用两个独立Prisma Schema(prisma/data/data.prisma、prisma/web/web.prisma)的SvelteKit项目中,遇到两个痛点:
- 客户端生成到
node_modules时,每次npm install都会被删除,需手动重新生成 - 客户端生成到本地prisma目录时,SSR引入出现
ReferenceError: exports is not defined错误
解决方案
1. 修复本地生成客户端的SSR模块兼容问题
Prisma默认生成CommonJS模块,而SvelteKit的SSR环境采用ES模块规范,直接引入会导致模块不兼容错误。只需修改Prisma生成配置,指定输出ES模块:
在每个Schema文件的generator块中添加outputFormat = "esm":
// prisma/web/web.prisma generator client { provider = "prisma-client-js" output = "./client" outputFormat = "esm" // 关键配置:生成ES模块 }
// prisma/data/data.prisma generator client { provider = "prisma-client-js" output = "./client" outputFormat = "esm" }
重新执行生成命令:
prisma generate --schema ./prisma/web/web.prisma prisma generate --schema ./prisma/data/data.prisma
之后在src/lib/prisma.js中按正确相对路径引入(注意要指向生成的index.js):
// src/lib/prisma.js import { PrismaClient as WebClient } from '../../prisma/web/client/index.js' export const web = new WebClient() import { PrismaClient as DataClient } from '../../prisma/data/client/index.js' export const data = new DataClient()
2. 避免npm install删除客户端的两种思路
思路A:将客户端生成到src目录下
把生成路径改到项目的src目录内(npm install不会改动src目录),配置示例:
generator client { provider = "prisma-client-js" output = "../../src/lib/prisma-clients/web" outputFormat = "esm" }
引入路径更简洁:
import { PrismaClient as WebClient } from './prisma-clients/web/index.js'
思路B:添加postinstall脚本自动生成
如果坚持用node_modules路径,可在package.json中添加postinstall钩子,每次npm install后自动重新生成客户端:
{ "scripts": { "prisma:generate:web": "prisma generate --schema ./prisma/web/web.prisma", "prisma:generate:data": "prisma generate --schema ./prisma/data/data.prisma", "prisma:generate": "npm run prisma:generate:web && npm run prisma:generate:data", "postinstall": "npm run prisma:generate" } }
内容的提问来源于stack exchange,提问作者Shark00n
相关产品推荐
相关产品推荐

