我从视频教程和官方文档中学习Prisma ORM。他们解释并将所有模型代码写在一个名为schema.prisma的文件中。这是确定的,但是,当应用程序的增长,它变得混乱。那么,我应该如何将模型定义分离到单独的文件中呢?
schema.prisma
huus2vyu1#
目前Prisma不支持文件分割。我可以推荐三个解决方案。
选项1:Prismix
Prismix利用模型和枚举通过prismix配置文件为Prisma模式创建跨文件的关系。
{ "mixers": [ { "input": [ "base.prisma", "./modules/auth/auth.prisma", "./modules/posts/posts.prisma", ], "output": "prisma/schema.prisma" } ] }
将其放置在prismix.config.json文件中,该文件将定义您希望如何合并Prisma分割。
选项二:Schemix
Schemix利用Typescript配置来处理模式分段。例如:
// _schema.ts import { createSchema } from "schemix"; export const PrismaSchema = createSchema({ datasource: { provider: "postgresql", url: { env: "DATABASE_URL" }, }, generator: { provider: "prisma-client-js", }, }); export const UserModel = PrismaSchema.createModel("User"); import "./models/User.model"; PrismaSchema.export("./", "schema");
用户模型内部
// models/User.model.ts import { UserModel, PostModel, PostTypeEnum } from "../_schema"; UserModel .string("id", { id: true, default: { uuid: true } }) .int("registrantNumber", { default: { autoincrement: true } }) .boolean("isBanned", { default: false }) .relation("posts", PostModel, { list: true }) .raw('@@map("service_user")');
这将生成包含完整模式的prisma/schema.prisma。我只使用了一个数据库作为示例(摘自文档),但您应该明白这一点。
**选项3:**Cat -〉Generate
将模式分割成块部分文件名并运行:
cat *.part.prisma > schema.prisma yarn prisma generate
其中大部分(如果不是全部的话)都在当前公开的关于Prisma模式文件分段https://github.com/prisma/prisma/issues/2377支持的问题中引用
g6ll5ycj2#
这在Prisma中是不可能的。有关可能的解决方法https://github.com/prisma/prisma/issues/2377,请参阅此未解决问题。
uxhixvfz3#
有一个名为Prismix的库,它允许您根据需要编写任意多个模式文件,这里是link
gmol16394#
可以在生成之前将所有架构合并为一个架构yarn add -g glob
yarn add -g glob
// package.json "scripts": { "prisma-concat": "npx ts-node prisma/concat-schemas.ts && npx prisma format", "generate": "yarn prisma-concat && npx prisma generate", }
// connect-db.prisma generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") }
// prisma/concat-schemas.ts import { appendFile, readFile, writeFile } from 'fs/promises' import { glob } from 'glob' const start = async () => { const schemaFile = 'prisma/schema.prisma' const connectFile = 'prisma/connect-db.prisma' const models = await glob('src/**/*.prisma') const files = [connectFile, ...models] await writeFile(schemaFile, '') await Promise.all( files.map(async (path) => { const content = await readFile(path) return appendFile(schemaFile, content.toString()) }), ) } start()
然后运行yarn generate
yarn generate
4条答案
按热度按时间huus2vyu1#
目前Prisma不支持文件分割。我可以推荐三个解决方案。
选项1:Prismix
Prismix利用模型和枚举通过prismix配置文件为Prisma模式创建跨文件的关系。
将其放置在prismix.config.json文件中,该文件将定义您希望如何合并Prisma分割。
选项二:Schemix
Schemix利用Typescript配置来处理模式分段。
例如:
用户模型内部
这将生成包含完整模式的prisma/schema.prisma。我只使用了一个数据库作为示例(摘自文档),但您应该明白这一点。
**选项3:**Cat -〉Generate
将模式分割成块部分文件名并运行:
其中大部分(如果不是全部的话)都在当前公开的关于Prisma模式文件分段https://github.com/prisma/prisma/issues/2377支持的问题中引用
g6ll5ycj2#
这在Prisma中是不可能的。有关可能的解决方法https://github.com/prisma/prisma/issues/2377,请参阅此未解决问题。
uxhixvfz3#
有一个名为Prismix的库,它允许您根据需要编写任意多个模式文件,这里是link
gmol16394#
可以在生成之前将所有架构合并为一个架构
yarn add -g glob
然后运行
yarn generate