2024 年 6 月 4 日

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

我们很高兴在 Prisma ORM 中推出一项新的预览功能:能够将您的 Prisma Schema 组织到多个文件中。了解如何在您的项目中实现此功能,探索最佳实践,并查看我们的示例项目以获取动手实践的示例。

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

更新(2025 年 6 月):此功能已在 v6.7.0 中普遍可用。您现在不再需要将其包含在 previewFeatures 中。请在文档中了解更多信息。

这是一条漫长的道路,但随着 Prisma ORM 5.15.0 的发布,我们终于推出了在 Prisma Schema 中使用多个文件的功能。这旨在提高数据库模式的可管理性和组织性,使其更易于处理大型项目。作为 我们最需要的功能之一,我们希望您能尝试 prismaSchemaFolder 预览功能,并在 GitHub 上告诉我们您的想法。您的持续反馈将帮助我们交付像这样的功能!

多文件 Prisma Schema 预览功能中包含什么

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

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 时,所有模式文件都会合并,因此您的工作流程将照常进行。其他 Prisma CLI 命令,例如 validateformat 也已更新,以支持多文件 Prisma Schemas。

何时使用多文件模式

我们已经听到并看到,随着项目的增长,单文件 Prisma Schema 最终会达到一个点,即它太大而无法有效管理。如果您遇到以下情况,您将立即从该功能中受益

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

多文件 Prisma Schemas 的提示

我们发现有一些模式与此功能配合良好,将帮助您充分利用它

  • 按领域组织文件:将相关模型分组到同一文件中。例如,将所有与用户相关的模型保存在 user.prisma 中,而将与帖子相关的模型保存在 post.prisma 中。尽量避免使用“大杂烩”模式文件。
  • 使用清晰的命名约定:模式文件应命名清晰简洁。使用 user.prismapost.prisma 等名称,而不是 myModels.prismaCommentFeaturesSchema.prisma
  • 拥有一个明显的“主”模式文件:虽然您现在可以拥有任意数量的模式文件,但您仍然需要一个地方来定义 generator 块。我们建议使用一个明显是“主”文件的模式文件,以便这些块易于查找。main.prismaschema.prismabase.prisma 是我们见过的一些效果不错的名称。
  • 将所有模式文件保存在您配置的模式文件夹中:如果您在 Prisma 配置中设置了自定义模式目录,请确保每个 .prisma 文件都在该文件夹中,包括您的 schema.prisma 文件。Prisma 只从您指定的目录加载文件,因此该文件夹之外的文件将被忽略。

示例项目

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

我们需要您的反馈!

我们很乐意听取您对此新功能的想法。请通过评论我们的专用 GitHub 讨论 来分享您的反馈和您可能遇到的任何问题。

不要错过下一篇文章!

订阅 Prisma 新闻通讯

© . This site is unofficial and not affiliated with Prisma Data, Inc.