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

React Native引入expo-media-library报MediaType错误如何解决

报错原因

该报错的核心是JS层无法获取到expo-media-library对应的原生桥接模块实例,_ExponentMediaLibrary.default值为undefined时访问MediaType属性就会抛出这个类型错误,和JS层的import写法无关,常见触发原因如下:

  • 执行完Expo模块安装、expo-media-library安装后,没有重新编译原生端安装包,旧的安装包里没有打入expo-media-library的原生代码,JS层加载模块时找不到对应原生实现
  • 安装的expo-media-library版本和当前项目的Expo SDK版本不匹配,跨大版本的依赖错位会导致原生模块导出的接口和JS层预期不一致
  • 原生端依赖缓存未清理,iOS的pod依赖未更新、Android的构建缓存残留,导致新安装的模块没有被正确链接
  • 执行npx install-expo-modules时修改原生配置失败,Expo模块的注册逻辑没有正确写入Android/iOS的入口文件,所有Expo模块都无法正常加载
修复步骤

按以下顺序操作即可解决问题:

  1. 对齐依赖版本
    先在项目根目录执行npm list expo查看当前项目安装的Expo SDK版本,安装对应大版本的expo-media-library,禁止跨大版本安装最新包:
    • Expo SDK 51 对应安装 expo-media-library@~16.0.0
    • Expo SDK 50 对应安装 expo-media-library@~15.4.0
    • Expo SDK 49 对应安装 expo-media-library@~15.2.0
  2. 清理缓存重装依赖
    删除项目根目录下的node_modules文件夹,以及对应包管理器的锁文件(package-lock.json/yarn.lock/pnpm-lock.yaml),重新执行npm install(或你使用的yarn/pnpm安装命令)完成依赖重装。
  3. 清理原生构建缓存并重新编译
    • Android端:关闭正在运行的Metro服务,进入android目录执行./gradlew clean清空构建缓存,回到项目根目录执行npx react-native run-android,必须重新编译生成新的安装包覆盖模拟器/真机上的旧版本,不能直接启动旧包。
    • iOS端:进入ios目录执行pod install --repo-update更新原生pod依赖,回到项目根目录执行npx react-native run-ios重新编译安装。
  4. 配置校验(前三步未解决时执行)
    • 打开Android端入口文件android/app/src/main/java/[你的项目包名]/MainApplication.java,确认ReactNativeHost的getPackages列表中包含new ExpoModulesPackage(),Expo模块初始化逻辑没有被误删。
    • 打开iOS端入口文件ios/[你的项目名]/AppDelegate.mm,确认didFinishLaunchingWithOptions方法中存在Expo模块的初始化调用,相关配置没有被修改。

注意:不要尝试通过修改node_modules下的源码、加可选链的方式绕过报错,这类方案只是掩盖问题,原生模块未加载的情况下相关API调用依然会失败。

内容的提问来源于stack exchange,提问作者Tushar Vimal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:09:29