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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:14:59