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

Expo 49构建React Native应用时shared-lib模块解析失败求助

解决EAS构建时无法识别Git子模块目录的问题

问题核心

本地模拟器运行正常,但EAS构建时找不到shared-lib目录,原因是EAS默认不会自动拉取Git子模块,且构建环境的文件扫描规则可能需要额外配置。


1. 配置EAS构建前拉取子模块

EAS构建流程默认不会初始化Git子模块,需要在eas.json中添加预构建命令,确保构建环境中能获取到子模块内容:
在项目根目录的eas.json中,给对应的构建profile(如production、development)添加preBuildCommand:

{
  "build": {
    "production": {
      "preBuildCommand": "git submodule update --init --recursive"
    },
    "development": {
      "preBuildCommand": "git submodule update --init --recursive"
    }
  }
}

该命令会在构建开始前,初始化并拉取所有Git子模块的完整代码。

2. 调整Metro打包配置

本地Metro默认会扫描根目录所有文件,但EAS构建可能需要明确指定监听子模块目录。创建或修改项目根目录的metro.config.js:

const { getDefaultConfig } = require('expo/metro-config');

const config = getDefaultConfig(__dirname);
// 将shared-lib添加到Metro的监听目录列表
config.watchFolders = [...config.watchFolders, './shared-lib'];

module.exports = config;

这一步确保Metro打包时能扫描到子模块内的文件,避免模块解析失败。

3. 验证Git子模块配置

检查项目根目录的.gitmodules文件,确认子模块路径配置正确,示例如下:

[submodule "shared-lib"]
  path = shared-lib
  url = <你的子模块Git仓库地址>

确保path字段与实际目录名完全一致,无拼写错误。

4. 本地模拟构建排查问题

可以先在本地执行以下命令,模拟EAS构建环境,提前验证配置是否生效:

# 先拉取子模块
git submodule update --init --recursive
# 本地执行EAS构建
npx eas build --local -p android

本地构建能快速排查配置问题,避免远程构建浪费时间。

内容的提问来源于stack exchange,提问作者Arvind K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:04:55