Клиент Apollo для angular: генерация кода из файлов graphql

Я узнал о генераторе кода angular graphql от здесь. Я пытаюсь использовать его в своем проекте для создания типов graphql и служб Query для angular.

Мой файл codegen.yml выглядит следующим образом.

overwrite: true
schema: "http://localhost:9010/myGraphQL"
documents: "apps/myGraphQLApp/src/gqls/**/*.graphql"
generates:
  apps/myGraphQLApp/src/app/generated/graphql.ts:
    plugins:
      - "typescript"
      - "typescript-operations"
      - "typescript-apollo-angular"

У меня есть файл graphql apps\myGraphQLApp\src\gqls\myBooks.graphql со следующим содержимым

query GetMyBooks {
  books{
    id
    name
  }
}

Я запускаю npx graphql-codegen --config codegen.yml, и происходит сбой со следующей ошибкой.

  √ Parse configuration
  > Generate outputs
    > Generate apps/myGraphQLApp/src/app/generated/graphql.ts
      √ Load GraphQL schemas
      √ Load GraphQL documents
      × Generate
        → Query root type must be provided.


 Found 1 error

  × apps/myGraphQLApp/src/app/generated/graphql.ts
    Error: Query root type must be provided.
        at assertValidSchema (....\node_modules\graphql\type\validate.js:71:11)
        ...

Мой сервер graphql определенно предоставляет корень запроса, и я могу вызывать его с разными клиентами.

schema {
  query: MyGraphQLQueryType
}

Я не уверен, что я делаю неправильно. Любая помощь будет оценена.


person Victor Mukherjee    schedule 16.01.2020    source источник


Ответы (1)


Я делаю и пример 1 год назад с генератором graphql, так что, возможно, он устарел с новыми версиями, но если хотите попробовать, у меня есть

overwrite: true
schema: schema.graphql
documents: src/app/graphql/*.graphql
generates:
  ./src/app/generated/graphql.ts:
    plugins:
      - typescript-common
      - typescript-client
      - typescript-apollo-angular
  ./schema.json:
    plugins:
      - introspection

Я думаю, ваша проблема в вашей схеме, у вас должно быть что-то вроде этого

type Query {
        login(email: String!, password: String!): AuthData!
        user: User!
        pets(page: Int, name: String, type: String): PetData!
        pet(id: ID!): Pet!
}

type Mutation {
        createUser(userInput: UserInputData): User!
        deletePet(id: ID!): Boolean
}

type User {
        id: ID!
        name: String!
        email: String!
        password: String!
        status: String!
        pets: [Pet!]!
}

type AuthData {
        token: String!
        userId: String!
}

input UserInputData {
        email: String!
        name: String!
        password: String!
}

type Pet {
        id: ID!
        name: String!
        type: String!
        imageUrls: [File!]!
        creator: UserPet!
        createdAt: String!
        updatedAt: String!
}

type PetData {
        pets: [Pet!]!
        totalPets: Int!
        filterData: FilterDataPet!
}

type File {
        id: String!
        path: String!
        filename: String!
        mimetype: String!
}

type UserPet {
        id: ID!
        name: String!
        email: String!
        pets: [Pet!]!
}

type FilterDataPet {
        isFilterData: Boolean!
        currentPage: Int!
        queryParams: QueryParamsPet
}

type QueryParamsPet {
        name: String
        type: String
}

Вы можете просмотреть полный пример здесь https://github.com/anthowm/graphqlpetapi-frontend/blob/master/codegen.yml

person anthony willis muñoz    schedule 16.01.2020