You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-native运行relay-compiler报Expect GraphQLAsts to exist错误求解

Relay Compiler 抛出 Expect GraphQLAsts to exist Panic 修复方案

这个报错是Rust版本的relay-compiler在解析流程异常时触发的崩溃,按以下优先级排查修复即可:

  • 第一优先级:修正Schema文件的非法注释
    GraphQL SDL 语法不支持双斜杠//风格的单行注释,仅支持#开头的注释格式。你在schema文件开头写的// relay_schema.graphql属于非法语法,会导致schema解析器完全无法生成合法AST:空schema文件时没有需要解析的内容所以不会触发报错,写入带非法语法的内容后就会触发该panic。
    修正后的合法schema内容:
    # relay_schema.graphql
    type Query {
      tasks: [TaskNode]
    }
    
    type TaskNode {
      id: ID!
    }
    
  • 第二优先级:修正Relay配置项
    两个常见配置错误会触发同类问题:
    1. 路径使用相对路径硬编码:执行relay-compiler时工作目录可能和配置文件所在目录不一致,会导致找不到schema或源码文件,建议用Node内置path模块拼接绝对路径
    2. language配置与项目实际语言不匹配:如果你没有在React Native项目中接入Flow类型系统,不要将该项设为flow,使用普通JS就设为javascript,使用TS就设为typescript
      修正后的配置参考:
    const path = require('path');
    module.exports = {
      src: path.resolve(__dirname, './src/'),
      language: 'javascript',
      schema: path.resolve(__dirname, './relay_schema.graphql'),
      exclude: ['**/node_modules/**', '**/__mocks__/**', '**/__generated__/**'],
    };
    
  • 第三优先级:校验源码中的GraphQL定义
    确认src目录下至少存在一个用graphql模板标签包裹的合法Relay操作(查询、突变、片段均可),部分旧版本relay-compiler在检测不到任何待编译的GraphQL操作时,也会触发同类AST不存在的崩溃。
  • 修复后操作:删除项目中已有的__generated__缓存目录,重新运行relay-compiler命令即可正常完成编译。

内容的提问来源于stack exchange,提问作者Abhimanyu Kaushal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:57:23