10月8日至10日与我们在纽约市相聚,了解 GraphQL 联邦和 API 平台工程的最新技巧、趋势和新闻。加入我们,参加2024年纽约市的 GraphQL 峰会
文档
免费开始

配置 Apollo 项目

如何通过 apollo.config.js 配置 Apollo VS Code 和 CLI


Apollo 项目使用apollo.config.js文件在项目的根目录中配置。许多 Apollo 工具会利用您的 Apollo 配置,最终减少您在项目中需要进行的配置量。

如果您使用我们的工作流程工具之一,如Apollo CLIApollo VS Code 扩展,您将需要一个apollo.config.js项目来获取这些工具提供的功能。

有两种类型的项目,clientservice。如果配置中找到client密钥,则将该项目视为客户端项目,只能对它运行client:*命令。相同的情况也适用于service项目。apollo.config.js文件旨在描述单个项目的配置。如果在一个多项目 monorepo 中使用,则每个项目应有一个单独的配置文件。

描述了 Apollo 配置中可用的所有选项,并定义了哪些是必需的与可选的。

客户端项目

客户端项目通过配置中的顶层client键进行配置。

module.exports = {
client: { ... },
};

client.service

必需 - Apollo CLI 和 VS Code 扩展依赖于对您架构的了解来显示 "IntelliSense"(例如,在 、指标注释、验证)。

您有多种方法可以将客户端链接到架构

  1. 使用 Apollo 架构注册表
  2. 通过远程端点(运行中的服务器)
  3. 通过本地架构文件

选项 1:使用 Apollo 架构注册表

要将客户端链接到架构,您需要至少在 注册表中发布您的架构的一个版本。

设置 后,您可以通过在 Apollo 配置中指定您的图名来直接将客户端指向您图中的架构,例如:

module.exports = {
client: {
service: 'my-apollo-service' // the name of your graph in Studio
}
};

注意

您必须有一个 已发布架构才能使 VS Code IntelliSense 等功能正常工作,这些功能需要了解您的架构。

如果您使用 在注册表中跟踪架构的不同版本,您可以通过以下方式将客户端链接到特定的变体:

module.exports = {
client: {
service: 'my-apollo-service@staging' // "staging" is the graph variant we're using
}
};

如果没有指定 ,Apollo 工具将回退到 current 的默认值。

可以通过远程端点拉取运行中的服务中的架构。这可以这样配置

module.exports = {
client: {
service: {
name: 'github',
url: 'https://api.github.com/graphql',
// optional headers
headers: {
authorization: 'Bearer lkjfalkfjadkfjeopknavadf'
},
// optionally turn off SSL validation check
skipSSLValidation: true
}
}
};

在某些情况下,您可能有一个带有您模式的本 地生成的文件,希望将其链接。它可以是 .graphql 文件,其中包含以 格式编写的模式,或者是一个保存的 结果,存为 .json。要将您的客户端项目链接到本地模式文件,请按以下方式配置:

module.exports = {
client: {
service: {
name: 'my-service-name',
localSchemaFile: './path/to/schema.graphql'
}
}
};

client.includes

可选 - 默认情况下,Apollo 工具将在 ./src 目录下查找所有 和 SDL 以提取。

客户端项目通常包含本地状态客户端模式定义,使用 。为了确保 Apollo CLI 和 VS Code 扩展能找到这些文件并正确读取它们,您可能需要告诉 Apollo 要在哪些文件夹中查找您的模式和查询,如下所述:

module.exports = {
client: {
includes: ['./imports/**/*.js'], // array of glob patterns
service: ...
},
};

client.excludes

可选 - 默认情况下,Apollo 工具在查找您的查询和模式文件时将排除 **/node_modules**/__tests___

如果您希望 Apollo 在查找查询和模式定义时忽略其他任何文件夹,请按以下方式调整您的配置

module.exports = {
client: {
excludes: ['**/__tests__/**/*'], // array of glob patterns
service: ...
},
};

client.tagName

可选 - 定制的标签模板。

当在 JavaScript 或 TypeScript 项目中使用 时,通常使用 gql 标签模板字面量来写出操作。Apollo 工具将遍历您的文件以查找 gql 标签以提取您的查询,因此如果使用不同的模板字面量,可以按如下方式配置:

module.exports = {
client: {
tagName: "graphql",
service: ...
}
};

client.addTypename

可选 - 默认情况下,Apollo 会自动将 __typename 字段添加到所有操作中,并在代码生成期间添加到所有生成的类型中。

类似于 客户端(例如,Apollo Client),它们在发送到线路时通常会自动将 __typename 字段添加到操作中。这可以非常方便地用于缓存等功能,但可以通过在客户端配置中添加 addTypename: false 来关闭:

module.exports = {
client: {
addTypename: false,
service: ...
}
};

💡 提示

为了保证一致性,我们建议您将此选项与您的 ApolloClient 配置保持一致。

client.clientOnlyDirectives, client.clientSchemaDirectives

可选 - 默认情况下,Apollo 项目支持以下客户端 :

  • @client 用于本地状态
  • @rest 用于使用 apollo-link-rest
  • @connection 用于使用 Apollo Client 的自定义分页
  • @type 用于与 apollo-link-rest 结合使用的动态类型名称

客户端应用程序可以在其查询中使用自定义的指令 ,这些指令不打算发送到服务器。 上述默认值之外客户端指令的配置可以设置如下:

module.exports = {
client: {
clientOnlyDirectives: ["connection", "type"],
clientSchemaDirectives: ["client", "rest"],
service: ...
}
};

clientOnlyDirectives 是在发送到服务器之前应该从 中移除的 指令 这是此类指令的例子之一,即 @connection 指令。

clientSchemaDirectives 是表示操作中不应该发送到服务器的那部分内容的 指令 这些指令以及它们放置在上的 字段 也会被移除。 这类指令的例子是 @client 指令。

服务器项目

服务器项目通过配置中的顶级 service 键进行配置。

module.exports = {
service: { ... },
};

在您的Apollo配置中定义一个 service 键将为Apollo CLI提供执行类似 apollo service:pushapollo service:check 命令所需的信息。

  1. 您可以通过两种方式设置服务的模式以进行加载:
  2. 使用远程端点

选项1:远程端点

可以通过远程端点拉取运行中的服务中的架构。这可以这样配置

module.exports = {
service: {
endpoint: {
url: 'https://api.github.com/graphql', // defaults to https://127.0.0.1:4000
headers: {
// optional
authorization: 'Bearer lkjfalkfjadkfjeopknavadf'
},
skipSSLValidation: true // optional, disables SSL validation check
}
}
};

选项2:本地模式

在某些情况下,您可能有一个本地生成的包含您模式文件,您想要链接。 这可以是SDL格式的.graphql 文件或包含查询结果的已保存 introspection 结果的.json 文件。 要将您的客户端项目链接到本地模式文件,请按照以下方式配置它:

module.exports = {
service: {
localSchemaFile: './path/to/schema.graphql'
}
};
下一步
主页
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,数据处理名称为Apollo GraphQL。

隐私政策

公司