Graphql

共享模型

学习如何在 NestJS GraphQL 应用中共享模型,通过模型垫片解决装饰器在前端的性能问题。

共享模型

警告 本章节仅适用于代码优先方法。

在项目后端使用 TypeScript 的最大优势之一是能够通过使用通用的 TypeScript 包,在基于 TypeScript 的前端应用程序中重用相同的模型。

但是有一个问题:使用代码优先方法创建的模型大量使用了 GraphQL 相关的装饰器。这些装饰器在前端是无关的,会对性能产生负面影响。

使用模型垫片

为了解决这个问题,NestJS 提供了一个"垫片",允许您通过使用 webpack(或类似的)配置将原始装饰器替换为惰性代码。 要使用这个垫片,请在 @nestjs/graphql 包和垫片之间配置一个别名。

例如,对于 webpack,这样解决:

resolve: { // 参见:https://webpack.js.org/configuration/resolve/
  alias: {
      "@nestjs/graphql": path.resolve(__dirname, "../node_modules/@nestjs/graphql/dist/extra/graphql-model-shim")
  }
}

提示 TypeORM 包有一个类似的垫片,可以在这里找到。