Travis构建因Git子模块失败问题求助
解决Travis构建含Git子模块的Angular项目时npm依赖缺失问题
看起来你遇到的问题核心是Travis构建环境中,后端子模块的npm依赖没有被正确安装,导致找不到raw-body/package.json。结合你提到的本地复现情况,我们可以从以下几个方向排查和解决:
1. 明确问题根源
你提到本地执行git clone --branch=upgrade ... + git submodule update --init --recursive会报错,但直接git clone --recursive ...正常——这大概率不是子模块拉取的问题,而是:
- 后者可能是在你本地已存在的项目目录执行,子模块的
node_modules已经提前安装过; - 前者是全新拉取代码,子模块目录下没有执行
npm install,导致依赖缺失。
报错信息里的路径/backend/node_modules/raw-body/package.json也印证了这一点:node_modules不会被Git跟踪,所以拉取子模块后必须手动安装依赖。
2. 修改Travis构建脚本,添加子模块依赖安装步骤
在你的.travis.yml文件中,需要在主项目依赖安装后,进入后端子模块目录执行npm install。示例配置如下:
language: node_js node_js: - "14" # 替换为你的项目使用的Node版本 before_install: - git submodule update --init --recursive # 确保递归拉取所有子模块 - cd backend && npm install && cd .. # 先安装子模块依赖 install: - npm install # 安装主项目依赖 script: - ng build --prod # 执行你的Angular构建命令
3. 排查子模块分支匹配问题
如果上述步骤无效,可能是upgrade分支下的子模块引用版本有问题:
- 检查主项目
upgrade分支的.gitmodules文件,确认子模块的branch配置是否正确(如果指定了分支); - 尝试在本地全新目录执行
git clone --branch=upgrade ...+git submodule update --init --recursive,然后手动进入backend执行npm install,看是否能解决问题——如果可以,那就是Travis脚本缺少这一步。
4. 验证Travis构建命令
如果子模块需要拉取指定远程分支的最新代码,可以修改子模块更新命令:
git submodule update --init --recursive --remote
这个命令会拉取子模块配置中指定的远程分支最新代码,避免子模块引用的是旧的commit导致依赖缺失。
内容的提问来源于stack exchange,提问作者faxad
相关产品推荐
相关产品推荐

