如何解决Apollo codegen嵌套fragment重复声明的问题
解决GraphQL Codegen重复声明fragment的方法
- 开启内置fragment去重配置
在你的codegen配置文件(通常为codegen.yml/codegen.js/codegen.ts)中添加dedupeFragments: true配置,该配置会自动识别重复导入的同一份fragment,全局仅保留一次声明。
常规配置示例:
如果你使用的是schema: ./schema.graphql documents: './src/**/*.gql' generates: ./src/generated/graphql.ts: plugins: - typescript - typescript-operations - typed-document-node config: dedupeFragments: true # 核心去重配置client预设,需要将配置放在presetConfig中:generates: ./src/generated/: preset: client presetConfig: dedupeFragments: true - 确保
#import语法被正确解析
提前安装@graphql-tools/import依赖,该工具负责解析.gql文件中的导入语法,准确识别公共fragment的引用关系,避免同一份fragment被codegen判定为多个独立实例。 - 升级GraphQL Codegen到稳定版
v2以下版本的GraphQL Codegen没有内置fragment去重能力,如果你使用的是旧版本,升级到v2及以上的稳定版即可支持上述去重配置。
配置生效后重新运行codegen,你的示例中ImageInfos fragment只会在生成的代码中声明一次,所有引用它的位置都会直接复用该声明,不会出现重复定义问题。
内容的提问来源于stack exchange,提问作者rayfranco
相关产品推荐
相关产品推荐

