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

Expo构建RN应用TestFlight资源丢失 metro.config.js配置报错排查

问题根源

你当前的metro.config.js写法有逻辑错误:虽然引入了Expo默认的metro配置,但最终导出的对象只保留了自定义修改的resolver字段,把Expo内置的静态资源打包规则、转换器配置、生产环境构建逻辑全部覆盖丢失了,构建环节自然会报「未继承@expo/metro-config」的警告,最终导致生产构建出的安装包静态资源缺失。
附带的app.json配置没有问题,assetBundlePatterns已经配置了全量资源匹配规则,不需要调整。

修复方案
  1. 直接替换metro.config.js的全部内容,使用官方提供的配置合并方法做增量修改,不要手动解构只返回部分配置项,也不要用异步导出的写法(Expo构建时不会等待异步Promise解析完成再读取配置,这也是你之前明明引入了默认配置还是触发警告的核心原因):
const { getDefaultConfig, mergeConfig } = require('@expo/metro-config');

const defaultConfig = getDefaultConfig(__dirname);

const customConfig = {
  resolver: {
    assetExts: [
      ...defaultConfig.resolver.assetExts,
      // 注:png/jpg/jpeg/gif是Expo默认已支持的资源后缀,不需要重复添加
      'svg',
      'ttf',
      'otf',
      'woff',
      'woff2'
    ],
    sourceExts: [
      ...defaultConfig.resolver.sourceExts,
      // 注:jsx/ts/tsx是Expo默认已支持的源码后缀,不需要重复添加
      'cjs',
      'mjs',
      'md',
      'mdx'
    ]
  }
};

module.exports = mergeConfig(defaultConfig, customConfig);
  1. 清除缓存后重新构建,避免旧配置缓存导致问题复现:
    • 本地开发调试先执行expo start -c清缓存重启服务
    • 提交云构建时增加--no-cache参数强制全量重新打包,比如EAS构建iOS包执行eas build --platform ios --no-cache
  2. 新构建出的包上传TestFlight后,静态资源丢失问题会直接修复,构建环节的metro配置警告也不会再出现。
避坑提示

后续修改metro配置时,一律使用mergeConfig方法合并自定义配置和默认配置,不要手动解构默认配置的部分字段返回,很容易遗漏Expo内置的核心构建规则,触发各种难排查的生产环境问题。

内容的提问来源于stack exchange,提问作者Logan Dallalio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:27:26