relay-compiler 12搭配graphql 16出现Invalid AST Node是否兼容?
报错核心原因
你遇到的Invalid AST Node报错是relay-compiler@12和graphql@16版本不兼容导致,和PostGraphile生成schema的逻辑无关。relay-compiler@12官方依赖的GraphQL版本范围为^15.0.0,GraphQL 16对AST节点结构做了不向下兼容的调整,包括部分节点属性命名、节点类型枚举值的修改,relay-compiler@12内置的AST解析逻辑仅适配GraphQL 15的结构,读取GraphQL 16输出的schema AST时就会抛出节点不识别的错误。
你降级GraphQL到v15后项目即可正常运行,已经可以排除PostGraphile的schema生成逻辑存在问题的可能,PostGraphile v4及以上版本输出的schema完全符合GraphQL官方规范。
版本适配说明
relay-compiler@12不能正常搭配graphql@16使用,如果你需要使用GraphQL 16,需要将Relay全量升级到v13及以上版本,Relay 13是首个官方适配GraphQL 16的版本,升级后无需调整PostGraphile相关配置即可正常完成编译。
临时兼容方案
如果暂时不需要升级Relay主版本,可以固定全局GraphQL版本为^15.8.0:
- 若使用npm,在
package.json中添加overrides配置强制所有依赖的graphql版本为15.x:
{ "overrides": { "graphql": "^15.8.0" } }
- 若使用yarn,在
package.json中添加resolutions配置强制版本:
{ "resolutions": { "graphql": "^15.8.0" } }
内容的提问来源于stack exchange,提问作者Kirk Ross
相关产品推荐
相关产品推荐

