2024 年 6 月 4 日

在 v5.15 中将您的 Prisma Schema 组织到多个文件中

我们很高兴在 Prisma ORM 中引入一项新的预览功能:将您的 Prisma Schema 组织到多个文件的能力。了解如何在您的项目中实现此功能,探索最佳实践,并查看我们的示例项目以获得实际操作示例。

An image showing several .prisma files with the text "Split your schema!"

这是一段漫长的旅程,但随着 Prisma ORM 5.15.0 的发布,我们终于引入了在 Prisma Schema 中使用多个文件的能力。此功能旨在提高数据库 Schema 的可管理性和组织性,从而使处理大型项目变得更容易。作为我们最受期待的功能之一,我们希望您能试用 prismaSchemaFolder 预览功能,并在GitHub 上告诉我们您的想法。您的持续反馈将帮助我们提供这样的功能!

多文件 Prisma Schema 预览功能包含哪些内容

新的 prismaSchemaFolder 预览功能允许您在 prisma 目录的 schema 子目录中定义多个文件。Prisma 会处理文件的组合,使您可以在一个文件中定义模型,然后在其他 Schema 文件中使用它,而无需导入。我们还更新了 Prisma Visual Studio Code 扩展,以支持多个 Schema 文件,包括“转到定义”和存在性检查。

An image of Visual Studio Code showing multiple .prisma files in a schema sub-directory of the prisma directory.

如何将您的 Prisma Schema 拆分为多个文件

首先,请确保 prisma@prisma/client 已更新到至少 5.15.0 版本。您还需要最新版本 (5.15.0) 的Prisma VSCode 扩展,以便在您的 IDE 中利用这些更新。

要将您的 Prisma Schema 拆分为多个文件,首先通过在 generatorpreviewFeatures 字段中包含 prismaSchemaFolder 来启用该预览功能。

然后,在您的 prisma 目录下创建一个 schema 子目录。您可以将您的 schema.prisma 移动到此目录中。

现在,您可以在 schema 目录中创建更多文件了!所有模型都可以在所有文件中被引用,因此关系可以跨文件存在,如下所示:

运行 prisma generate 时,所有 Schema 文件都会合并,因此您的工作流程将像往常一样继续。其他 Prisma CLI 命令,例如 validateformat,也已更新以支持多文件 Prisma Schema。

何时使用多文件 Schema

我们听到并看到,随着项目的增长,单文件 Prisma Schema 最终会变得太大而难以有效管理。如果您满足以下情况,此功能将带来立竿见影的好处:

  • Schema 复杂:如果您的 Schema 包含大型模型或复杂关系,将相关的模型放入单独的文件中可以帮助您的 Schema 更易于理解和导航。
  • 团队规模大:当您拥有一个单独的 Prisma Schema 文件并且有很多开发人员提交时,您可能会在一天中遇到一些相当烦人的合并冲突。将大型 Schema 分割成多个文件有助于减轻这种痛苦。

多文件 Prisma Schema 的使用技巧

我们发现一些模式非常适合此功能,并将帮助您充分利用它

  • 按领域组织文件:将相关的模型分组到同一个文件中。例如,将所有用户相关的模型保存在 user.prisma 中,而将帖子相关的模型放在 post.prisma 中。尽量避免出现“大杂烩式”的 Schema 文件。
  • 使用清晰的命名约定:Schema 文件应该命名清晰简洁。使用诸如 user.prismapost.prisma 这样的名称,而不是 myModels.prismaCommentFeaturesSchema.prisma
  • 有一个明显的“主”Schema 文件:虽然您现在可以拥有任意数量的 Schema 文件,但您仍然需要一个地方来定义 datasourcegenerator 块。我们建议使用一个明显的“主”Schema 文件,以便轻松找到这些块。我们见过的一些效果不错的名字有 main.prismaschema.prismabase.prisma

示例项目

如果您想了解此功能在实际项目中的应用,请查看我们对 dub.co 的 dub 项目的fork,这是我们最喜欢的开源项目之一!

我们需要您的反馈!

我们非常期待听到您对此新功能的想法。请在我们的GitHub 专题讨论中发表评论,分享您的反馈和遇到的任何问题。

不要错过下一篇文章!

订阅 Prisma 新闻通讯