升级Expo SDK 46后React Native项目报错求助
解决Expo SDK 46升级后的ViewPropTypes与AppRegistry错误
核心原因分析
你项目里没找到ViewPropTypes的引用,是因为第三方依赖库在使用旧版React Native的API——RN 0.69(对应Expo SDK46)已经把ViewPropTypes从核心包移到了deprecated-react-native-prop-types,而你的某个依赖还在直接从react-native导入它,导致初始化报错,进而引发AppRegistry的连锁错误。
具体解决步骤
1. 定位问题依赖
先找出哪个第三方库在调用旧的ViewPropTypes:
- Mac/Linux终端运行:
grep -r "ViewPropTypes" node_modules/ - Windows PowerShell运行:
Get-ChildItem -Path node_modules -Recurse | Select-String -Pattern "ViewPropTypes"
运行后会输出所有包含该引用的文件路径,从中提取对应的依赖包名(比如node_modules/react-native-xxx/src/xxx.js里的react-native-xxx就是目标依赖)。
2. 修复依赖问题
方案A:升级依赖到适配版本
找到问题依赖后,查看它的最新版本是否适配RN 0.69/Expo SDK46,若有适配版本直接升级:
npm install [依赖包名]@latest --save
(像旧版的react-native-modal、react-native-elements这类UI库常出现此问题,升级后一般能解决)
方案B:给依赖打补丁(无适配版本时用)
如果依赖没有更新,用patch-package手动修改依赖代码:
- 安装patch-package工具:
npm install patch-package --save-dev - 找到依赖中引用
ViewPropTypes的文件,将:
修改为:import { ViewPropTypes } from 'react-native';import ViewPropTypes from 'deprecated-react-native-prop-types'; - 生成补丁文件:
后续执行npx patch-package [依赖包名]npm install时会自动应用该补丁。
方案C:临时全局注入(应急用)
如果赶时间,可在项目入口文件(如App.js或index.js)最顶部添加以下代码,临时将ViewPropTypes注入到React Native全局对象:
import { ViewPropTypes } from 'deprecated-react-native-prop-types'; import * as ReactNative from 'react-native'; ReactNative.ViewPropTypes = ViewPropTypes;
注意:这只是临时 workaround,后续仍需替换或修复依赖。
3. 清除缓存并重启项目
解决完ViewPropTypes问题后,清除缓存重启项目,AppRegistry的错误大概率会自动消失:
expo r -c
或使用:
npm start -- --reset-cache
额外检查(若仍有问题)
- 确认
app.json中的main字段路径正确,Expo项目默认值为"main": "node_modules/expo/AppEntry.js",自定义入口需保证路径无误。 - 检查项目入口文件(如
App.js)是否存在其他初始化错误,比如组件导入错误、异步代码未处理导致的崩溃。
内容的提问来源于stack exchange,提问作者little_miffy
相关产品推荐
相关产品推荐

