首页 > 解决方案 > Apollo 客户端:codegen 如何为@client 指令生成类型?

问题描述

当我运行以下命令时:

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 个可能的错误:

任何想法?

标签: graphqlapolloapollo-client

解决方案


好的,看来我必须直接在 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 对我来说从来没有用过,但这将是一个挖掘的解决方案……</p>


推荐阅读