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

Expo TypeScript项目Android构建失败:模块解析错误

Expo + TypeScript EAS Build Android 模块解析失败排查方案

核心矛盾

eas build --platform android 时Metro报错无法解析模块,但yarn tsc --noEmit完全正常——说明TypeScript的路径解析逻辑和Metro的打包解析逻辑存在差异,从以下几个方向逐一排查:


1. 文件名大小写不匹配(最常见原因)

TypeScript默认不区分文件名大小写,但EAS构建服务器用的是Linux系统,文件系统严格区分大小写。

  • 对比导入路径的大小写和本地实际文件的文件名(比如导入写的BlocklistScreen.tsx,实际文件是不是blocklistScreen.tsx?)
  • 修正导入语句的路径,确保和文件系统的文件名完全一致

2. Metro与TS的路径别名配置不同步

如果项目用了路径别名(比如@/screens/xxx),TS能识别但Metro可能没配置:

  • 打开tsconfig.json,复制compilerOptions.paths里的配置
  • 在metro.config.js(或metro.config.ts)中同步别名映射,示例配置:
    const { getDefaultConfig } = require('expo/metro-config');
    const path = require('path');
    const config = getDefaultConfig(__dirname);
    
    config.resolver.alias = {
      '@': path.resolve(__dirname, './src'),
      // 其他别名按tsconfig里的配置补全
    };
    
    module.exports = config;
    

3. Metro缓存残留导致解析异常

本地或构建服务器的Metro缓存可能保留了旧的路径信息:

  • 本地先清理缓存:npx expo start --clear
  • 构建时强制清理缓存:eas build --platform android --clear-cache

4. Metro未正确配置TSX扩展名解析

虽然TS允许省略扩展名,但Metro在某些场景下需要明确声明支持TSX:

  • 在metro.config.js中检查resolver.sourceExts,确保包含tsx:
    config.resolver.sourceExts = [...config.resolver.sourceExts, 'tsx'];
    

5. 构建代码缺失目标文件

EAS构建基于Git仓库代码,检查:

  • .gitignore是否误屏蔽了BlocklistScreen.tsx所在目录
  • 确认该文件已经提交到Git仓库,没有被忽略

6. 依赖版本兼容性问题

如果最近升级过Expo/Metro,可能存在版本冲突:

  • 回退到之前能正常构建的依赖版本,或者升级到最新稳定版
  • 执行yarn install重新安装依赖,确保版本一致

补充检查点

  • 查看tsconfig.json的include数组,确认包含目标文件所在目录
  • 确认tsconfig.json的compilerOptions.moduleResolution设置为node或bundler

内容的提问来源于stack exchange,提问作者A Mehmeto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:50:04