Apollo/GraphQL 错误:标识符名称违规:变量名称应仅包含字母数字字符“__typename”(identifier_name)

Posted

技术标签:

【中文标题】Apollo/GraphQL 错误:标识符名称违规:变量名称应仅包含字母数字字符“__typename”(identifier_name)【英文标题】:Apollo/GraphQL error: Identifier Name Violation: Variable name should only contain alphanumeric characters '__typename' (identifier_name) 【发布时间】:2021-05-13 15:05:55 【问题描述】:

我在我的 Swift 项目中使用 GraphQL。我已经通过 CocoaPods 安装了 Apollo,并在我的项目中添加了一个 schema.json 文件。但是,我在整个项目中不断遇到错误。我目前正在处理的错误在API.swift 中,这是一个由 Apollo 自动生成的文件。该文件包含自动生成的变量“__typename”,它将始终存在,因为 Apollo 似乎在编译时重新生成了它(换句话说,我不能简单地删除这些“__typename”的声明)。

我的API.swift 文件中不断出现此错误:

Variable name should only contain alphanumeric characters '__typename' (identifier_name)

有谁知道这是为什么?我的朋友有一个具有完全相同实现的项目(他的 API.swift 文件具有完全相同的变量名),并且它可以工作!我的机器上的 Apollo 有问题吗?

谢谢!

【问题讨论】:

您设法解决了这个问题吗?你使用的是哪个版本的 Xcode 和 Apollo? 【参考方案1】:

我遇到了同样的问题,发现我的项目正在使用SwiftLint。请检查您是否在 pod 文件中使用 SwiftLint。

默认启用的 SwiftLint 规则之一Identifier Name 导致自动生成的 Apollo GraphQL API.swift 文件中出现 Identifier Name Violation 错误消息。

标识符名称规则说明:

标识符名称只能包含字母数字字符并以小写字符开头,或者只能包含大写字母。在上述情况下,变量名在声明为静态和不可变时可以以大写字母开头。变量名不宜过长或过短。

您有 2 个选项可以禁用此规则。

选项 1:为您的整个项目禁用规则

如果您不想为您的项目使用特定的 SwiftLint 规则,那么您可以通过在您的 xcode 项目中添加和configuring.swiftlint.yml 来完全禁用这些规则。

disabled_rules: # rule identifiers to exclude from running

  - identifier_name

选项 2:在文件级别禁用规则

在抛出“__typename”错误的行上方添加禁用comment。

// swiftlint:disable:this identifier_name

我建议使用选项 1,因为选项 2 将要求您禁用 Generate Apollo GraphQL API Build Phase,因为这将重新生成您的 API.swift 文件。

我的设置:

Xcode:12.4 版 Mac OS X:版本:10.15.7 阿波罗:apollo/2.33.4 darwin-x64 node-v12.18.3

【讨论】:

以上是关于Apollo/GraphQL 错误:标识符名称违规:变量名称应仅包含字母数字字符“__typename”(identifier_name)的主要内容,如果未能解决你的问题,请参考以下文章

为多个 vue 属性重用 apollo graphql 查询定义

GraphQL - 如何捕获“内部”Apollo/GraphQL 错误 - Java Spring Boot

如何从 Apollo/GraphQL 中捕获错误

Apollo GraphQL 本地和全局错误处理

React + Apollo:GraphQL 错误数组未传递到组件中

Apollo GraphQL 错误处理