无法找到以下指针的任何 GraphQL 类型定义:src/**/*.graphql

问题描述 投票:0回答:6

我正在使用

@graphql-codegen/cli
工具从我的 graphql 服务器生成打字稿类型。 这是我的
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"

这是我用来生成类型的

package.json
脚本 (
yarn schema
):

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

所有这些都是通过执行cli向导自动生成的

yarn codegen init

但是当我运行

yarn schema
时,这些是我得到的错误:

enter image description here

(服务器正在

http://localhost:3001/graphql
正常运行并公开图形模式。

感谢您的帮助和建议

这是托管在我的服务器中的 .graphql 文件(http://localhost:3001/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!
}
typescript graphql code-generation graphql-codegen
6个回答
41
投票

您共享的文件是您的架构(由服务器生成),但您似乎尚未在其上创建任何查询或突变。这将是代码生成无法正常工作的原因。

我建议您使用简单的查询创建一个新文件,例如:

get-users.query.graphql

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

并将其添加到您的

src
文件夹中(因为您的代码生成器配置为查找
.graphql
文件夹中的所有
src
文件)。然后重新运行 codegen 并查看是否运行良好。

之后,您可以使用查询和突变生成各种

.graphql
文件,并使用codegen生成相应的类型。


3
投票

就我而言,我将所有查询重构为新文件夹中的单个文件:

lib/queries.tsx

然后我需要做的是将文件路径添加到

codegen.yml

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

2
投票

“文档”codegen.yml 文件中的特殊性

您必须小心

documents
字段,因为当您初始化
graphql-code
时,默认值是示例中提供的值(
src/**/*.graphql
),但这在大多数情况下考虑的是React应用程序。

但是,在我的例子中,我使用 Next 并且没有

src
目录(尽管
create-next-app
为您提供了拥有
src
目录的选项)。因此,我需要指定那些扩展名为
.graphql
的文件的确切位置。

为什么需要 .graphql 文件

在其他新闻中,

.graphql
文件是必需的,因为我们告诉 codegen 我们想要请求什么数据,因此 codegen 应该为我们生成类型。

如您所知,您可能需要 graphql API 中的所有数据或仅其中的一部分。无论如何,codegen 将仅获取您请求的数据类型。

如果您不创建任何 .graphql 文件,codegen 将不会为您生成任何类型,因为它不知道它在寻找什么。


0
投票

请检查你的操作文件的后缀,并根据后缀更改此文件,也许你的文件后缀是.ts或.js,默认情况下在codegen.yml文件中是

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

将 .graphql 替换为你的操作文件名的后缀,如 .ts 或 .js

那是我的问题,或者可能是文件地址错误


0
投票

在某些情况下,此错误可能是由于项目的绝对路径中有空格造成的。 例如:

/home/my project folder with spaces/node_modules/*


0
投票

生成的文件和文档的路径可能会发生冲突。

为生成的客户端文件指定一个不同的目录,然后为 graphql 文档所在的目录,例如:

const config: CodegenConfig = {
  schema: 'http://localhost:4000/graphql',

  documents: ['./src/graphql/queries.gql', './src/graphql/mutations.gql'],

  generates: {
    './src/graphql/generated/': {
      preset: 'client',
    },
  

您会看到另一个不同的目录,称为“生成”。这解决了我的问题。

由于此评论,我能够修复它。

© www.soinside.com 2019 - 2024. All rights reserved.