React Native 0.69报ViewPropTypes移除及AppRegistry错误如何解决
React Native 0.69.0 ViewPropTypes移除报错及连带AppRegistry错误解决方案
问题根因
React Native 0.69 版本正式从核心包中移除了ViewPropTypes属性,要求开发者迁移使用deprecated-react-native-prop-types包导出的对应实现。你看到的AppRegistry is not a registered callable module是JS bundle初始化阶段因ViewPropTypes引用错误直接崩溃触发的连带异常,并非入口路径配置错误、bundle损坏导致,只要修复ViewPropTypes的引用问题,该错误会自动消失。
结合你提供的依赖清单,项目中多个第三方依赖未同步完成0.69版本适配,仍在从react-native核心包引用ViewPropTypes,直接触发了初始化崩溃。
可行解决方案
方案1:入口全局兼容(最快生效,无需修改第三方依赖)
- 先安装官方要求的兼容依赖:
# npm npm install deprecated-react-native-prop-types # yarn yarn add deprecated-react-native-prop-types
- 打开项目根目录的入口文件
index.js,在所有其他import语句的最顶部加入以下兼容代码,将ViewPropTypes重新挂到RN核心对象上,供未适配的第三方包调用:
import { ViewPropTypes } from 'deprecated-react-native-prop-types'; import { LogBox } from 'react-native'; // 注入全局兼容 Object.defineProperty(require('react-native'), 'ViewPropTypes', { get: () => ViewPropTypes, configurable: true, }); // 可选:忽略ViewPropTypes迁移相关警告 LogBox.ignoreLogs(['ViewPropTypes will be removed from React Native']);
- 重启metro打包服务并清除缓存:
npx react-native start --reset-cache
重新运行应用即可正常启动。
方案2:升级第三方依赖到适配版本
可以逐个升级存在兼容问题的依赖到已完成0.69适配的版本,从根源解决引用问题,已知你依赖中需要升级的包及最低适配版本如下:
@react-native-community/checkbox:升级到0.5.13及以上react-native-progress:升级到5.0.1及以上react-native-country-picker-modal:升级到2.0.1及以上react-native-signature-canvas:升级到4.4.0及以上react-native-pdf:升级到6.6.0及以上react-native-radio-input:该包长期未维护,无适配版本,建议替换为维护活跃的同类组件如react-native-radio-buttons-group
升级操作步骤:
- 删除项目根目录下的
node_modules文件夹、包管理锁文件(package-lock.json/yarn.lock/pnpm-lock.yaml) - 重新执行依赖安装命令
- iOS端重新执行
pod install更新原生依赖,Android端直接清理构建缓存 - 带
--reset-cache参数重启metro服务,重新构建应用即可。
方案3:用patch-package持久化修复无更新的依赖
如果部分依赖长期无维护、也没有替代方案,可以使用patch-package直接修改依赖内的引用逻辑,持久化修复问题:
- 安装patch-package到开发依赖:
npm install patch-package -D
- 打开
node_modules下对应问题包的源码,将所有import { ViewPropTypes } from 'react-native'语句替换为:
import ViewPropTypes from 'deprecated-react-native-prop-types/DeprecatedViewPropTypes';
- 执行命令生成对应包的补丁,以修复
react-native-radio-input为例:
npx patch-package react-native-radio-input
- 在
package.json的scripts字段中添加postinstall钩子,保证后续安装依赖时自动应用补丁:
{ "scripts": { "postinstall": "patch-package" } }
注意事项
- 所有修复操作完成后,必须清除metro缓存重启服务,否则旧的打包缓存会导致错误持续出现
- 不要随意修改AppRegistry注册逻辑、调整入口文件路径,这类操作无法解决当前的初始化崩溃问题
- 如果修复后仍出现相同报错,可以通过报错堆栈定位具体是哪个第三方包在引用核心包的ViewPropTypes,针对性处理即可。
内容的提问来源于stack exchange,提问作者Youssef Ayed
相关产品推荐
相关产品推荐

