满足依赖要求时RelayFindGraphQLTags仍编译失败问题咨询
Relay编译操作名校验报错解决方案
问题原因
该错误不属于框架BUG,是Relay编译器默认强制执行的操作命名规范校验触发的预期报错。
Relay默认规则要求:graphql标签内定义的操作名,必须以当前代码所在文件的模块名(即文件名,不含后缀)为前缀,且后缀必须为Query/Mutation/Subscription三类。你当前的操作名为CustomersQuery,但代码位于名为Main的模块(对应文件名为Main.ts/Main.tsx等),命名不匹配因此校验失败。
可选解决方案
可根据你的开发需求任选一种处理:
- 方案1:修改操作名匹配文件名
如果你当前文件命名无需调整,直接将操作名改为和模块名匹配即可,修改后代码示例:const testQuery = graphql`query MainQuery { customers(first: 20) { nodes { id name } } }` - 方案2:修改文件名匹配操作名
如果你希望保留CustomersQuery的命名,将当前代码所在的文件重命名为Customers.tsx即可,Customers前缀会和操作名匹配通过校验。 - 方案3:关闭命名规范校验(不推荐)
如果你有特殊业务需求不需要遵循该规范,可以在Relay编译命令中添加--no-enforce-naming-convention参数关闭校验,修改后构建脚本如下:"relay": "relay-compiler --src ./src --schema ./schema.graphql --language typescript --extensions ts tsx js jsx --no-enforce-naming-convention"
注:Relay默认开启该命名规范是为了方便全局查询去重、调试时快速定位查询所在文件,属于官方推荐的最佳实践,无特殊需求建议优先选择前两种方案。
内容的提问来源于stack exchange,提问作者arano879n
相关产品推荐
相关产品推荐

