使用Apollo Server时,如何生成schema.graphql文件?

9
使用Apollo Server编写GraphQL服务器时,我如何在服务器上运行命令以生成schema.graphql文件供客户端使用?注意:我不是使用Apollo Client,而是使用Relay。
我知道可以运行GraphQL playground并从那里下载,但我想要一个可以自动化的命令行。
当使用GraphQL Ruby时,类似于rake graphql:schema:dump的东西可以在服务器上运行以生成schema.graphql
2个回答

14

你可以使用Apollo CLI来完成此操作。首先安装它:

npm install -g apollo

然后按照文档所示运行此命令:

apollo client:download-schema --endpoint=URL_OF_YOUR_ENDPOINT schema.graphql

该命令将根据输出文件的扩展名生成内省结果或SDL模式。

您的 ApolloServer 实例不会公开创建的模式,但您也可以直接针对实例运行内省查询:

const { getIntrospectionQuery, buildClientSchema, printSchema } = require('graphql')
const { ApolloServer } = require('apollo-server')

const apollo = new ApolloServer({ ... })
const { data } = await apollo.executeOperation({ query: getIntrospectionQuery() })
const schema = buildClientSchema(data)
console.log(printSchema(schema))

如果您正在将现有的GraphQLSchema实例传递给Apollo服务器,则还可以直接调用printSchema


我没有使用Apollo客户端......如果服务器正在运行,那岂不是只需要curl/wget吗? - pupeno
我不确定你使用的客户端如何影响这个问题。你要求运行一个CLI命令来获取SDL格式的服务器模式,这是一种方法。你不能只使用curl,因为那只会返回introspection结果。你需要一种方法将其转换为GraphQLSchema对象,然后打印出来。还有其他的方法可以做到这一点,但你特别要求一个CLI命令。 - Daniel Rearden
我需要在服务器上使用CLI命令生成schema.graphql,而无需下载任何内容。我更新了我的问题以明确这一点。非常抱歉。 - pupeno
如果你想从命令行运行它,你需要将它转换成一个npm脚本。 - Daniel Rearden
这适用于联合模式吗? - Max Coplan
建议使用的软件包已被弃用。 - Vladyslav Zavalykhatko

3

这个apollo包已经被弃用了。

简而言之;

您可以尝试使用@graphql-codegen/schema-ast并使用以下配置将模式生成到单独的文件中:

generates:
  src/@generated/graphql.ts:
    # TS definitions, if any
  src/@generated/schema.graphql:
    plugins:
      - 'schema-ast'

如果您遇到类似问题,以下是更详细的解答:

我们的设置包括 @apollo/client@graphql-codegen/cli。后者与 Apollo Studio schema(codegen.yml 支持它)配合使用。

我们试图解决的问题是集成不支持 Apollo schema 的 eslint 插件

最终,我们通过使用 codegen 插件在本地下载和生成 schema,并在 eslint 中引用它来解决了这个问题。同时,我们将其添加到了 gitignore 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接