我正在使用@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!
}
5条答案
按热度按时间p1iqtdky1#
您共享的文件是您的模式(由您的服务器生成),但似乎您没有在其上创建任何查询或突变。这可能是代码生成器无法正常工作的原因。
我建议你用一个简单的查询创建一个新文件,比如:
get-users.query.graphql
然后把它添加到你的
src
文件夹中(因为你的代码生成器被配置为查找src
文件夹中的所有.graphql
文件),然后重新运行代码生成器,看看它是否工作正常。之后,您可以生成各种
.graphql
文件与您的查询和突变,并使用代码生成器生成相应的类型。ruyhziif2#
在我的例子中,我将所有查询重构到一个新文件夹中的单个文件中:
lib/queries.tsx
.接下来我需要做的就是将该文件路径添加到
codegen.yml
中:nmpmafwu3#
请检查你的操作文件的后缀和改变这文件基于那,也许你的文件后缀是.ts或.js和由默认在codegen.yml文件是
将.graphql替换为操作文件名的后缀,如.ts或.js
那是我的问题,或者是文件地址错了
fv2wmkja4#
在某些情况下,此错误可能是由于项目的绝对路径中有空格造成的。例如:
/home/my project folder with spaces/node_modules/*
nom7f22z5#
"documents“codegen.yml文件中的特定性
在
documents
字段中必须小心,因为初始化graphql-code
时,默认值是示例中提供的值(src/**/*.graphql),但在大多数情况下,这是考虑React应用。然而,在我的例子中,我使用Next,并且没有
src
目录(尽管create-next-app为您提供了拥有src目录的选项),因此,我需要指定扩展名为.graphql的文件的确切位置。为什么需要.graphql文件
在其他新闻中,.graphql文件是必要的,因为我们告诉代码生成器我们想要请求的数据是什么,因此,代码生成器应该为我们生成类型。
正如你所知,你可能需要graphql API中的所有数据或者只是其中的一部分,在任何情况下,codegen都只会得到你所请求的数据类型。
如果您不创建任何.graphql文件,codegen将不会为您生成任何类型,因为它并不需要它所查找的类型