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.
相关产品推荐
相关产品推荐

