Expo ejected React Native项目图片路径找不到问题求助
问题描述
- 项目:已eject到裸工作流的Expo React Native项目
- 报错:
[native] Could not find image on path,路径指向file:///var/mobile/Containers/Data/Application/..../Library/Application%20Support/.expo-internal/assets/... - 依赖版本:
"react": "17.0.1", "react-native": "0.64.0", "expo": "~41.0.1", "expo-error-recovery": "^2.1.0", "expo-font": "~9.1.0", "expo-modules-core": "^0.2.0", "expo-splash-screen": "^0.10.3", "expo-status-bar": "~1.0.4", "expo-updates": "^0.5.5" - 已尝试无效方案:
- Firebase Cloud Messaging登出处理方案
- Expo裸工作流下图片找不到的通用修复方案
适配解决办法
针对你当前Expo 41 + React Native 0.64的裸工作流环境,试试这些针对性步骤:
1. 重置expo-updates缓存与原生项目
报错路径是expo-updates的缓存目录,大概率是更新后资源不同步:
- 执行
expo prebuild --clean,彻底清理并重新生成原生项目文件,确保资源链接无误 - iOS端:模拟器直接擦除所有内容(
Hardware > Erase All Content and Settings),真机卸载APP后重装 - 修改
app.json的updates配置,禁用缓存 fallback:"updates": { "fallbackToCacheTimeout": 0 }
2. 修正本地图片引用逻辑
裸工作流不能用Managed模式的图片引用方式,改成RN原生规则:
- 放弃别名引用,改用相对路径,比如把
require('@assets/icon.png')改成require('../assets/icon.png') - 确认资源已正确链接:iOS检查
Images.xcassets里有没有对应图片;Android检查res/drawable目录,或者执行npx react-native link重新链接
3. 修复expo-asset兼容问题
Expo 41的裸工作流里expo-asset存在路径解析bug,手动调整:
- 安装适配版本的expo-asset:
npm install expo-asset@8.3.2 - 在APP启动时手动预加载资源,替代Expo自动加载逻辑:
import { Asset } from 'expo-asset'; import * as Font from 'expo-font'; async function loadResourcesAsync() { await Promise.all([ Asset.loadAsync([ require('../assets/your-image.png'), // 其他需要预加载的图片资源 ]), Font.loadAsync({ // 你的字体配置 }), ]); }
4. 配置iOS目录访问权限
确保APP能访问缓存目录:
- 在iOS项目的
Info.plist中添加以下配置:<key>NSLibraryFolderUsageDescription</key> <string>需要访问库目录加载缓存资源</string> <key>NSDocumentsFolderUsageDescription</key> <string>需要访问文档目录加载资源</string>
内容的提问来源于stack exchange,提问作者Kapil Avaiya
相关产品推荐
相关产品推荐

