GitHub Actions中node_modules安装偶发静默失败及jq合并JSON报错求助
问题1:GitHub Action中npm/yarn安装静默失败导致命令执行报错
现象
自定义GitHub Action用于从OpenAPI文件生成TypeScript客户端,25%概率出现npm i/yarn install静默失败,node_modules完全未生成,后续执行npm run orval等命令时提示文件不存在;失败时安装速度异常快,重新运行工作流可恢复。
解决建议
- 强制开启安装日志:把安装命令改成
yarn install --verbose或npm install --verbose,失败时能捕获到具体错误信息(比如网络超时、缓存损坏) - 清理缓存后再安装:在安装步骤前添加清理缓存命令:
yarn cache clean --all # 或者npm的命令 npm cache clean --force - 增加安装重试机制:用shell脚本实现重试,避免单次网络波动导致失败:
# 最多重试3次 retry=3 until yarn install; do retry=$((retry-1)) if [ $retry -le 0 ]; then exit 1 fi echo "安装失败,重试中..." sleep 2 done - 确认工作目录正确性:确保安装命令是在包含
package.json的目录下执行,可在安装前加pwd && ls -l检查当前路径和文件 - 指定稳定Node版本:用
actions/setup-node固定Node版本,避免版本兼容问题:- name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20.x' cache: 'yarn' # 或npm
问题2:jq合并JSON时出现object与null相乘报错
现象
执行命令jq -s '.[0] * .[1]' ./file1.json ./dir/file2.json时,报错:jq: error (at client/package.json:9): object ({"author":"...) and null (null) cannot be multiplied
原因
其中一个JSON文件解析后结果为null,可能是文件不存在、内容为空或JSON格式无效。
解决建议
- 先检查文件状态:执行命令确认两个文件存在且内容有效:
ls -l ./file1.json ./dir/file2.json cat ./file1.json ./dir/file2.json - 处理null值避免报错:修改jq命令,将null替换为空对象后再合并:
jq -s '.[0] // {} * .[1] // {}' ./file1.json ./dir/file2.json - 验证JSON格式:用
jq .单独检查每个文件的格式是否正确:jq . ./file1.json jq . ./dir/file2.json
内容的提问来源于stack exchange,提问作者NegativeOne
相关产品推荐
相关产品推荐

