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

React Native iOS构建:Jenkins执行xcodebuild报错无法解析empty-module.js

Jenkins构建React Native iOS应用时metro模块解析失败的解决方案

问题场景

本地MacOS终端执行以下命令可正常构建React Native iOS应用:

xcodebuild archive -workspace MyProject.xcworkspace -derivedDataPath build -scheme MyProject -archivePath $PWD/build-artifacts/MyProject.xcarchive -configuration Release CODE_SIGN_STYLE='Automatic' BITCODE_GENERATION_MODE='bitcode'

但通过Jenkins的「Execute shell」步骤执行相同命令时,出现metro模块找不到的错误:

error Unable to resolve module /Users/mike/git/my-project/node_modules/react-native/node_modules/metro-runtime/src/modules/empty-module.js from /Users/mike/git/my-project/_:

None of these files exist:

  • ../my-project/node_modules/react-native/node_modules/metro-runtime/src/modules/empty-module.js(.native|.native.js|.js|.native.json|.json|.native.ts|.ts|.native.tsx|.tsx)
  • ../my-project/node_modules/react-native/node_modules/metro-runtime/src/modules/empty-module.js/index(.native|.native.js|.js|.native.json|.json|.native.ts|.ts|.native.tsx|.tsx)
    ...(堆栈信息省略)

已确认系统与Jenkins的node、npm等工具PATH一致,以下是可行的解决方向:


1. 修正Jenkins工作目录的路径问题

错误日志中的../my-project/路径说明构建时的工作目录与本地终端不一致。Jenkins默认工作目录是项目工作空间根目录,而本地是在项目目录下执行命令。在shell步骤开头先切换到项目目录:

cd /Users/mike/git/my-project
# 再执行原构建命令
xcodebuild archive -workspace MyProject.xcworkspace -derivedDataPath build -scheme MyProject -archivePath $PWD/build-artifacts/MyProject.xcarchive -configuration Release CODE_SIGN_STYLE='Automatic' BITCODE_GENERATION_MODE='bitcode'

或者使用Jenkins内置的$WORKSPACE变量确保路径正确:

cd $WORKSPACE
# 执行构建命令

2. 清理并重新安装依赖

Jenkins工作空间可能残留旧依赖或损坏的缓存,导致metro解析异常。在构建前添加清理步骤:

# 清理旧依赖和锁文件
rm -rf node_modules
rm -f package-lock.json yarn.lock

# 重新安装JS依赖
npm install
# 若使用yarn则替换为 yarn install

# 安装iOS原生依赖(React Native 0.60+ 必需)
npx pod-install ios

注意确保Jenkins用户对项目目录有读写权限。

3. 显式设置关键环境变量

除PATH外,NODE_ENV、HOME等环境变量可能影响metro的路径解析。在shell步骤开头添加:

export NODE_ENV=production
export HOME=/Users/mike # 指定Jenkins使用的用户home目录,避免缓存路径混乱

4. 清理Metro缓存

Metro的缓存可能存在损坏,在构建前重置缓存:

npx react-native start --reset-cache

或者直接删除Metro的全局缓存目录:

rm -rf ~/.metro-cache

5. 排查Jenkins额外配置干扰

部分Jenkins插件(如凭证管理插件)可能修改环境变量导致路径解析错误,可临时禁用这些额外配置,测试是否能正常构建。


内容的提问来源于stack exchange,提问作者mikeb-meq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:10:26