Expo SDK49安卓构建后图标与图片资源不显示问题排查
Expo SDK49 Monorepo构建后图标/图片消失的排查方案
1. Metro配置未适配Monorepo结构
Monorepo下默认Metro只会扫描当前包的文件,导致跨包或子包资源未被纳入打包流程。需修改项目根目录的metro.config.js:
const { getDefaultConfig } = require('expo/metro-config'); const path = require('path'); const config = getDefaultConfig(__dirname); // 添加monorepo工作区目录到监听列表 config.watchFolders = [ path.resolve(__dirname, '../'), // 若当前包在packages目录下,上级目录为monorepo根 ]; // 配置resolver支持monorepo模块解析 config.resolver.nodeModulesPaths = [ path.resolve(__dirname, 'node_modules'), path.resolve(__dirname, '../node_modules'), ]; // 确保静态资源扩展名被正确识别 config.resolver.assetExts.push('png', 'jpg', 'jpeg', 'svg', 'ttf'); module.exports = config;
2. 资源导入路径错误
开发环境Expo Client兼容松散路径,但生产构建对路径要求严格:
- 避免多层嵌套的相对路径(如
require('../../assets/icon.png')),建议配置babel别名实现根目录导入 - 确保导入路径在monorepo结构下可被正确解析,示例:
// 配置别名后(需配合babel-plugin-module-resolver) import Icon from '@assets/icon.png'; // 或明确相对路径 import Icon from '../assets/icon.png';
3. App配置文件中的图标路径错误
检查app.json或app.config.js中的图标配置,确保路径相对于当前包根目录:
{ "expo": { "icon": "./assets/icon.png", "splash": { "image": "./assets/splash.png" } } }
4. 依赖Hoisting导致资源缺失
已对uuid设置nohoist,但资源相关依赖可能因hoisting出现问题,补充规则到package.json:
"workspaces": { "nohoist": [ "uuid", "@expo/vector-icons", "react-native-svg", "expo-font" ] }
修改后删除node_modules和锁文件,重新安装依赖。
5. EAS Build未指定工作区
在eas.json中明确当前包的工作区路径,避免构建时资源寻址错误:
{ "build": { "production": { "workspace": "./packages/mobile-app" // 替换为你的包实际路径 } } }
内容的提问来源于stack exchange,提问作者Lekeasong
相关产品推荐
相关产品推荐

