Skip to content

共享模型

警告

本章仅适用于代码优先方式。

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

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

使用模型垫片

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

例如,对于 webpack,可以这样配置:

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

提示

TypeORM 包也有类似的垫片,可以在这里找到。

基于 NestJS 官方文档翻译