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 客户端生成片段类型?

如何为 Apollo GraphQL 客户端禁用 InMemoryCache?

在客户端解析器中导入类型时,如何避免使用 Apollo 客户端和“graphql-codegen”的角度项目中的循环依赖?

如何为带有 InMemoryCache 的 apollo-client 中的正则表达式匹配的任何数据指定最大缓存时间?

如何为graphql查询转义变量

从 graphql-codegen 获取类似于 apollo codegen 生成的类型