typescript 找不到以下指针的任何GraphQL类型定义:源代码/**/*.图形

xsuvu9jc  于 2023-02-13  发布在  TypeScript
关注(0)|答案(5)|浏览(246)

我正在使用@graphql-codegen/cli工具从我的graphql服务器生成typescript类型,下面是我的codegen.yml内容:

overwrite: true
schema: "http://localhost:3001/graphql"
documents: "src/**/*.graphql"
generates:
  src/generated/graphql.tsx:
    plugins:
      - "typescript"
      - "typescript-operations"
      - "typescript-react-apollo"
  ./graphql.schema.json:
    plugins:
      - "introspection"

下面是我用来生成类型(yarn schema)的package.json脚本:

"schema": "graphql-codegen --config codegen.yml"

所有这些都是通过执行cli向导yarn codegen init自动生成的。
但是当我运行yarn schema时,我得到了以下错误:

(服务器正以http://localhost:3001/graphql运行,并公开了图形模式。
谢谢你的帮助和建议
下面是托管在我的服务器(http://localhost:3001/graphql)上的.graphql文件

# -----------------------------------------------
# !!! THIS FILE WAS GENERATED BY TYPE-GRAPHQL !!!
# !!!   DO NOT MODIFY THIS FILE BY YOURSELF   !!!
# -----------------------------------------------

"""Date custom scalar type"""
scalar Date

type Mutation {
  create_user(user: UserInput!): User!
  create_pofficer(pofficer: POfficerCreateInput!): POfficer!
  create_incident(incident: TIncidentInput!): TIncident!
  add_incident_type(incident_type: TIncidentTypeInput!): TIncidentType!
}

type POfficer {
  _id: ID!
  userid: ID!
  user: User!
}

input POfficerCreateInput {
  name: String!
  surname: String!
  phone: String!
}

type Query {
  users: [User!]!
  pofficers: [POfficer!]!
  incidents: [TIncident!]!
  incident_types: [TIncidentType!]!
}

type TIncident {
  _id: ID!
  createdAt: Date!
  incidenttype_id: ID!
  pofficer_id: ID!
  toffender_id: ID
  toffender_phone: String!
  carnumber: String!
  incident_status: String!
  pofficer: POfficer!
  toffender: User!
  incident_type: TIncidentType!
}

input TIncidentInput {
  incidenttype_id: ID!
  pofficer_id: ID!
  toffender_phone: String!
  carnumber: String!
}

type TIncidentType {
  _id: ID!
  name: String!
  description: String
}

input TIncidentTypeInput {
  name: String!
  description: String
}

type User {
  _id: ID!
  name: String!
  surname: String!
  email: String
  phone: String!
}

input UserInput {
  name: String!
  surname: String!
  email: String!
  phone: String!
}
p1iqtdky

p1iqtdky1#

您共享的文件是您的模式(由您的服务器生成),但似乎您没有在其上创建任何查询或突变。这可能是代码生成器无法正常工作的原因。
我建议你用一个简单的查询创建一个新文件,比如:get-users.query.graphql

query GetUsers {
  user {
    _id
    __typename
    name
    surname
    email
    phone
  }
}

然后把它添加到你的src文件夹中(因为你的代码生成器被配置为查找src文件夹中的所有.graphql文件),然后重新运行代码生成器,看看它是否工作正常。
之后,您可以生成各种.graphql文件与您的查询和突变,并使用代码生成器生成相应的类型。

ruyhziif

ruyhziif2#

在我的例子中,我将所有查询重构到一个新文件夹中的单个文件中:lib/queries.tsx.
接下来我需要做的就是将该文件路径添加到codegen.yml中:

documents:
  - "./lib/queries.tsx"
nmpmafwu

nmpmafwu3#

请检查你的操作文件的后缀和改变这文件基于那,也许你的文件后缀是.ts或.js和由默认在codegen.yml文件是

documents: "src/**/*.graphql"

将.graphql替换为操作文件名的后缀,如.ts或.js
那是我的问题,或者是文件地址错了

fv2wmkja

fv2wmkja4#

在某些情况下,此错误可能是由于项目的绝对路径中有空格造成的。例如:/home/my project folder with spaces/node_modules/*

nom7f22z

nom7f22z5#

"documents“codegen.yml文件中的特定性

documents字段中必须小心,因为初始化graphql-code时,默认值是示例中提供的值(src/**/*.graphql),但在大多数情况下,这是考虑React应用。
然而,在我的例子中,我使用Next,并且没有src目录(尽管create-next-app为您提供了拥有src目录的选项),因此,我需要指定扩展名为.graphql的文件的确切位置。

为什么需要.graphql文件

在其他新闻中,.graphql文件是必要的,因为我们告诉代码生成器我们想要请求的数据是什么,因此,代码生成器应该为我们生成类型。
正如你所知,你可能需要graphql API中的所有数据或者只是其中的一部分,在任何情况下,codegen都只会得到你所请求的数据类型。
如果您不创建任何.graphql文件,codegen将不会为您生成任何类型,因为它并不需要它所查找的类型

相关问题