javascript - Cum să imporți directive în modulul GraphQL din NestJS?


Trebuie să generez tipuri TypeScript pentru MongoDB folosind graphql-code-generator și pluginul typescript-mongodb, dar nu înțeleg cum să import directivele acelui plugin într-o aplicație NestJS.

În aplicația mea backend (nestJS) modulul graphql este definit astfel:

import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';

@Module({
  imports: [
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      typePaths: ['./**/*.graphql']
    }),
  ],
})
export class AppModule {}

În documentația pluginului văd că trebuie să folosesc directivele:

import { makeExecutableSchema } from '@graphql-tools/schema'
import { DIRECTIVES } from '@graphql-codegen/typescript-mongodb'

const schema = makeExecutableSchema({
  typeDefs: [
    DIRECTIVES
    // the rest of your GraphQL types
  ],
  resolvers
})

Dar nu înțeleg cum să implementez asta în aplicația mea nestJS, care folosește GraphQLModule.

Răspuns #1

  1. Instalează aceste pachete în depozitul curent nestjs
npm i @graphql-codegen/cli @graphql-codegen/typescript-mongodb
  1. adaugă fișierul de configurare codegen codegen.yml
overwrite: true
schema: "http://localhost:3000/graphql"
documents: null
generates:
  src/generated/graphql.ts:
    plugins:
      - "typescript"
      - "typescript-mongodb"

Schema de cod de mai sus ar trebui să indice către endpoint-ul local GraphQl. Codul de mai sus va genera tipuri în fișierul src/generated/graphql.ts

  1. adaugă scriptul generate în scripturile din package.json
    "generate": "graphql-codegen --config codegen.yml"
  1. rulează scriptul de generare
npm run generate

Notă: serverul graphQL (start:dev) trebuie să fie pornit în timp ce folosești comanda generate

Linkul către repo funcțional - https://github.com/vinodsai-a/nestjs-graphql-codegen-example