Expo/React Native本地图片加载故障求助:require引入图片无法显示
针对你遇到的本地图片加载失效、远程图片正常,且团队其他成员无此问题的情况,可尝试以下针对性方案:
深层清理Expo与Metro缓存
除了常规的expo r -c,手动删除本地Expo缓存目录:- Mac/Linux:
rm -rf ~/.expo/cache - Windows:删除
%USERPROFILE%\.expo\cache文件夹
同时删除项目根目录下的.expo文件夹,再重启Metro Bundler。
- Mac/Linux:
确认图片引入的静态语法
确保require()的路径是静态字符串,避免动态拼接(如require(./assets/${name}.png))。Expo的资源打包机制对动态路径支持有限,需改为静态导入:// 正确写法 <Image source={require('./assets/avatar.png')} />校验Expo CLI与SDK版本一致性
运行expo --version查看本地CLI版本,与团队成员对比。若版本不一致,降级到统一版本:npm install -g expo-cli@[团队使用的版本号]同时检查项目
package.json中expo依赖的版本,确保与CLI匹配。查看Metro Bundler的详细日志
启动项目后,在Metro的终端窗口中搜索图片相关的报错信息(如Asset not found、Failed to resolve module),这些日志能直接定位具体的加载失败原因。重置Expo Go应用版本
若使用Expo Go测试,卸载当前设备上的Expo Go,重新下载与项目SDK版本匹配的官方版本,避免版本不兼容导致的资源加载异常。检查本地文件系统的实际状态
用终端命令(如ls assets/)查看assets文件夹下的实际文件,确认图片文件存在、文件名无特殊字符(空格、中文、特殊符号),且路径与代码中的引入完全一致(注意大小写敏感,Mac/Linux系统区分文件名大小写)。强制刷新资源打包配置
在app.json中临时将assetBundlePatterns改为["**/*"](匹配所有资源),然后运行:expo prebuild --clean # 仅适用于bare workflow项目或执行
expo export --clear后重启项目,确保资源打包规则生效。
内容的提问来源于stack exchange,提问作者Ben

