安装RelayJS后遇到Flowtype错误,使用react-native-cli默认.flowconfig
解决RelayJS安装后React Native默认.flowconfig引发的Flowtype错误
我之前在React Native项目里装RelayJS后也踩过这个Flowtype的坑,用react-native-cli生成的默认.flowconfig确实和Relay的类型系统不太合拍,下面是我亲测能解决问题的几个步骤:
添加Relay类型文件到Flow的包含路径
打开项目根目录的.flowconfig,找到[include]区块,添加以下两行:./node_modules/relay-runtime/**/*.js ./node_modules/react-relay/**/*.js这一步是让Flow能识别Relay包内部的官方类型定义,默认配置没有包含这些路径,所以会触发找不到类型的报错。
调整node_modules的忽略规则
如果你的.flowconfig里[ignore]区块有类似./node_modules/.*的全局忽略规则,会把Relay的文件也排除在外,需要改成更精准的规则:./node_modules/(?!relay-runtime|react-relay)/**/*.js这个正则的意思是:忽略
node_modules下除了relay-runtime和react-relay之外的所有目录,确保Flow能解析Relay的类型文件。适配严格模式的检查规则
默认React Native的Flow配置开启了一些严格检查,比如untyped-import,可能会因为Relay部分导出的类型覆盖问题触发报错。你可以两种方式处理:- 在
[lints]区块把该规则降级为警告:untyped-import=warn - 或者在
[options]区块添加模块映射,指向Relay带完整类型的编译文件:module.name_mapper='^relay-runtime$' -> 'relay-runtime/lib/index.js' module.name_mapper='^react-relay$' -> 'react-relay/lib/index.js'
- 在
重启Flow服务生效配置
最后执行以下命令重启Flow,让新配置生效:flow stop && flow start
如果还是碰到类型错误,可以检查一下Relay版本和Flow版本是否兼容——Relay官方会在文档里标注对应的Flow版本范围,尽量保持版本匹配哦。
内容的提问来源于stack exchange,提问作者Hieu Tran
相关产品推荐
相关产品推荐

