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

执行rubocop命令时lint-staged进程卡住问题排查求助

可能的根因及排查方案

根因分析

  • Rubocop stdin交互阻塞:lint-staged默认会将修改的文件列表通过stdin传递给命令,而Rubocop在检测到stdin输入时,可能进入等待用户输入的交互模式,导致进程挂起。本地直接执行命令时是直接扫描文件,不会通过stdin传参,因此无此问题。
  • bundle环境变量不一致:lint-staged子进程的环境变量(如BUNDLE_GEMFILE、PATH)与终端直接执行时存在差异,导致bundle查找依赖或Gemfile时异常,引发进程冻结。
  • Rubocop-airbnb加载异常:加载rubocop-airbnb规则时可能存在文件锁、依赖冲突或缓存未命中,导致进程卡住。本地直接运行时可能已缓存加载结果,而lint-staged子进程未复用该缓存。
  • 命令参数传递冲突:当前配置未明确指定文件处理方式,lint-staged的文件传递逻辑与Rubocop的预期不匹配,引发异常状态。

排查与解决建议

  1. 修改命令避免stdin交互:在Rubocop命令中添加--no-stdin参数,强制不读取stdin,或明确指定文件路径:

    {
      "*.rb": [
        "bundle exec rubocop --require rubocop-airbnb --no-stdin"
      ]
    }
    

    或者使用--stdin-file-path {relative}参数,让Rubocop正确处理lint-staged传入的文件:

    {
      "*.rb": [
        "bundle exec rubocop --require rubocop-airbnb --stdin-file-path {relative}"
      ]
    }
    
  2. 校验环境变量差异:在lint-staged配置中添加环境变量打印命令,对比终端直接执行的输出:

    {
      "*.rb": [
        "echo $PATH $BUNDLE_GEMFILE",
        "bundle exec rubocop --require rubocop-airbnb --version"
      ]
    }
    

    若存在差异,可在命令中手动指定环境变量,例如明确Gemfile路径:

    {
      "*.rb": [
        "BUNDLE_GEMFILE=./Gemfile bundle exec rubocop --require rubocop-airbnb"
      ]
    }
    
  3. 排除bundle环境问题:尝试直接运行rubocop命令(不通过bundle),验证是否是bundle的问题:

    {
      "*.rb": [
        "rubocop --require rubocop-airbnb --version"
      ]
    }
    

    若此命令正常,可尝试更新bundle版本,或指定bundle的执行路径。

  4. 更新依赖版本:检查rubocop与rubocop-airbnb的兼容性,尝试升级或降级版本,排除已知的兼容性bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:42:38