Expo发布后Ionicons显示问号、Open-Sans字体加载失败求助
排查与解决思路
1. 补全Jenkins项目依赖安装步骤
你的Jenkins发布流程仅安装了全局的eas-cli和expo-cli,但缺失本地项目依赖安装环节。本地发布时依赖已提前安装,但CI环境是干净的,必须添加以下步骤(放在eas login之前):
npm install --no-progress
确保expo-font、图标库等资源相关依赖都被正确安装。
2. 验证自定义字体的路径与文件存在性
- 检查Jenkins工作目录中
../assets/fonts/路径下的字体文件是否存在:如果是monorepo结构(依赖本地common包),需确保Jenkins拉取了整个仓库的所有子目录,而非仅当前项目。 - 可在Jenkins流程中添加验证命令:
ls -la ../assets/fonts/
若文件不存在,调整代码拉取逻辑;若路径错误,修改Font.loadAsync中的路径(比如改为项目根目录相对路径./assets/fonts/,根据实际结构调整)。
3. 清除Expo缓存后再发布
CI环境可能残留旧缓存,导致资源未被正确打包上传。在expo publish前添加缓存清除命令:
expo r -c # 清除Expo打包缓存 # 或直接删除缓存目录 rm -rf .expo/
4. 统一图标依赖版本
代码中使用@expo/vector-icons/Ionicons,但package.json仅依赖react-native-vector-icons,两者可能存在版本冲突。Expo SDK 47对应@expo/vector-icons版本为~13.0.0,建议在package.json中添加明确依赖:
"dependencies": { "@expo/vector-icons": "~13.0.0", // 其他依赖... }
重新安装依赖后再发布,确保图标库与Expo SDK版本匹配。
5. 检查Jenkins执行权限
确保Jenkins运行用户对项目目录(含字体文件目录)有读取权限,避免因权限不足导致资源无法读取打包。可添加权限检查命令:
ls -ld ../assets/fonts/
若权限不足,执行chmod -R 755 ../assets/fonts/调整。
6. 查看发布时的资源上传日志
在expo publish命令中添加详细日志参数,确认资源是否被正确上传:
expo publish --release-channel <name-of-my-channel> --verbose
若日志中无字体、图标资源上传记录,需检查app.json或app.config.js的assetBundlePatterns配置,确保资源被打包工具识别:
{ "expo": { "assetBundlePatterns": [ "assets/**/*" ] } }
内容的提问来源于stack exchange,提问作者pepperav
相关产品推荐
相关产品推荐

