Apollo 客户端:codegen 如何为@client 指令生成类型?
Posted
技术标签:
【中文标题】Apollo 客户端:codegen 如何为@client 指令生成类型?【英文标题】:Apollo client:codegen how to generate typings for @client directive? 【发布时间】:2019-11-16 22:35:29 【问题描述】:当我运行以下命令时:
apollo client:codegen --target=typescript --config=./apollo.config.js --outputFlat=./graphql.queries.ts
→ 初始化 Apollo GraphQL 项目“MySchema”时出错:错误: “加载合并模式的模式”中的错误:错误:未知指令 “客户”。
这是由于我的一个查询包含@client
指令:
query MyQuery
someStuff @client
value
开启https://github.com/apollographql/apollo-tooling/issues/366 我发现我可以为 apollo codegen 命令指定一个 --clientSchema 属性,例如:
apollo codegen:generate generated \
--queries=src/components/**/*.tsx \
--target typescript \
--schema src/generated/schema.json \
--clientSchema src/state/schema.graphql
但我使用的是 apollo.config.js
文件,但我没有找到如何在配置文件中指定此 clientSchema 等效项。
我看到 2 个可能的错误:
要么我没有正确使用@client 指令 或者 apollo.config.js 文件中缺少对 clientSchema 的支持(已删除或未记录?)有什么想法吗?
【问题讨论】:
【参考方案1】:好的,看来我必须直接在 schema.graphql 之一中添加以下行
directive @client on FIELD
这将重载 AST 定义以支持 @client 指令。
然后写:
query MyQuery
someStuff @client
value
不会再在我的 IDE 中引发错误,也不会在生成相应的 queries.ts 文件时引发错误。
关于信息:另一个线程提到在.graphqlconfig
文件中添加上面的行,如下所示:
"name": "Schema name",
"schemaPath": "./pathTo/schema.graphql",
"extensions":
"endpoints":
"Default GraphQL Endpoint":
"url": "http://localhost:4466",
"headers":
"user-agent": "JS GraphQL"
,
"introspect": false
,
"extensions":
"customDirectives": [
"directive @client on FIELD"
]
但是将它添加到 .graphqlconfig 对我来说从来没有用过,但这将是一个挖掘的解决方案……
【讨论】:
以上是关于Apollo 客户端:codegen 如何为@client 指令生成类型?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Apollo GraphQL 客户端禁用 InMemoryCache?
在客户端解析器中导入类型时,如何避免使用 Apollo 客户端和“graphql-codegen”的角度项目中的循环依赖?