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

升级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手动修改依赖代码:

  1. 安装patch-package工具:
    npm install patch-package --save-dev
    
  2. 找到依赖中引用ViewPropTypes的文件,将:
    import { ViewPropTypes } from 'react-native';
    
    修改为:
    import ViewPropTypes from 'deprecated-react-native-prop-types';
    
  3. 生成补丁文件:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:40:37