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

React Native项目package.json中ci脚本执行报错排查请求

排查React Native项目CI脚本执行错误的问题

我来帮你拆解这个CI脚本的问题和错误原因:

一、CI脚本本身的逻辑缺陷

你的ci脚本有两处明显的问题:

  • mv命令的逻辑错误:mv ./report/* ./report/unit.xml这个操作逻辑有误——如果report目录下有多个文件,mv无法把多个源文件移动到一个目标文件中(只有目标是目录时才能批量移动);如果是单个文件,这个命令是重命名,但脚本不管测试结果如何都强行执行该操作,完全忽略了报告是否生成的情况。
  • 冗余的执行逻辑:((start-server-and-test ... && mv ...) || mv ...)的写法完全多余,本质上不管前序步骤成功还是失败,都会尝试执行mv操作,这就导致即使测试没运行、报告没生成,也会触发mv的找不到文件错误。

二、错误出现的具体原因

1. Node.js版本与依赖包不兼容导致TypeError

第一个报错TypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type function,根源是你使用的Node.js版本(看起来是v8.x或更早)和start-server-and-test依赖的get-stream模块版本不兼容。老版本Node.js的util.promisify只接受回调风格的函数作为参数,而新版本的get-stream或其依赖的execa模块调用promisify时传入了非函数值,直接触发了这个类型错误。

2. 报告文件未生成导致mv命令失败

第二个报错mv: cannot stat './report/*': No such file or directory,是因为前面的start-server-and-test因TypeError崩溃,导致nightwatch测试脚本根本没机会运行,自然不会生成报告文件。再加上脚本开头执行了rm -rf ./report/*清空了报告目录,mv命令找不到任何可操作的文件,所以抛出这个错误。

三、修复建议

  1. 升级Node.js版本:建议升级到Node.js v12.x及以上版本,解决util.promisify的兼容性问题,让start-server-and-test能正常运行。
  2. 修正CI脚本逻辑:
    • 先确保report目录存在,避免rm和mv因目录不存在报错:添加mkdir -p ./report在rm之前。
    • 调整mv的逻辑,只在测试成功且报告生成时执行合理的文件操作(比如替换为nightwatch实际生成的报告文件名)。
    • 简化脚本逻辑,去掉冗余的|| mv操作,示例如下:
      "ci": "mkdir -p ./report && rm -rf ./report/* && start-server-and-test start http://localhost:8000 test && mv ./report/nightwatch-report.xml ./report/unit.xml"
      

内容的提问来源于stack exchange,提问作者Ashish Jindal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:19:05