按照Relay分步指南操作到第5步执行yarn start出现AST Node错误
问题根因分析
核心根因
该问题本质是Relay工具链的版本不兼容,具体原因如下:
- Relay的整套生态(包括
relay-compiler、react-relay、babel-plugin-relay)对版本一致性要求非常严格,不同版本的Relay对GraphQL AST节点的结构定义、字段规则会有调整,只要relay-compiler的版本和其他Relay依赖的版本不匹配,编译器生成的AST结构就无法通过后续流程的校验,就会抛出Invalid AST Node的错误。 - 你本地全局安装的
relay-compiler版本刚好和项目内其他Relay依赖的版本匹配,所以调用全局版本编译时生成的AST结构符合校验规则,不会触发报错;而项目本地node_modules下安装的relay-compiler版本和其他依赖版本不匹配,就会触发错误。
修复方案
- 先卸载项目内已有的所有Relay相关依赖:
yarn remove relay-compiler react-relay babel-plugin-relay graphql
- 统一安装版本匹配的依赖:
yarn add relay-compiler react-relay babel-plugin-relay graphql
- 删除项目中之前编译生成的所有
__generated__文件夹,再重新执行编译和启动命令即可。
注意:不要混合使用全局和项目本地的
relay-compiler,建议在package.json的scripts字段中定义"relay": "relay-compiler",每次执行yarn relay调用本地版本,避免版本不一致问题。
内容的提问来源于stack exchange,提问作者wasd0109
相关产品推荐
相关产品推荐

