news 2026/9/15 22:17:53

react-doctor 如何配合 git pre-commit 钩子只扫描已暂存文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
react-doctor 如何配合 git pre-commit 钩子只扫描已暂存文件

react-doctor 如何配合 git pre-commit 钩子只扫描已暂存文件

【免费下载链接】react-doctorYour agent writes bad React. This catches it项目地址: https://gitcode.com/GitHub_Trending/re/react-doctor

你希望每次git commit之前,react-doctor 只检查这次提交暂存(staged)的改动,而不是全仓库重扫。react-doctor 提供--staged扫描模式,它的官方 CLI 帮助里对该标志的描述就是 "scan only staged (git index) files for pre-commit hooks";配合react-doctor install命令可以装好对应的 git 钩子。完成后,钩子会在提交时执行react-doctor --staged --blocking warning,把已暂存文件中的问题打印到 stderr——按官方说明它是非阻塞设计,提交本身仍会继续,诊断信息只是可见,让你知道要修什么。

前提是一个可用的 git 项目,以及能执行 npx 的 Node 环境。先在项目根目录跑通一次普通审计(README.md 的快速开始):

npx react-doctor@latest

能正常出报告,再进入下面的钩子配置。

安装 react-doctor 的 git 钩子

在项目根目录运行安装命令:

npx react-doctor@latest install

CLI 对该命令的定义是 "Install the react-doctor skill into your coding agents and optional git hook"——它同时负责向编码代理安装 skill,以及可选的git 钩子,所以安装过程中有交互提示,git 钩子是其中一项可选项。两个有用的开关(来自 CLI 命令定义):

  • --dry-run:show what would be installed without writing files,先预览会安装什么,不写任何文件;
  • -y, --yes:skip prompts, install for all detected agents,跳过提示直接装到所有检测到的代理。

先用--dry-run确认清单,再正式执行,是改动仓库配置前的稳妥做法。

钩子在提交时具体做了什么

生成的 pre-commit 钩子内部固定调用这条命令(见 钩子模板源码):

react-doctor --staged --blocking warning

即只扫描 git 索引里的文件,且把告警级别也当作失败级别(--blocking的可取值为 error(默认)、warning、none,none 表示只做提示)。当暂存内容里发现问题时,钩子向 stderr 打印扫描输出,并附带提示文案:

React Doctor found staged regressions. Run react-doctor --staged --blocking warning to inspect. Want them fixed? Ask your agent to run that command and resolve the findings.

需要注意一个明确的设计决定:这个钩子不阻塞提交。官方 changelog 说明它 "stays non-blocking by design (the commit still proceeds)",诊断信息现在会被完整输出而不是被吞掉。也就是说,提交后你看到的诊断清单属于"待修问题",需要回头按提示处理;如果你需要硬性拦截提交,--staged模式本身在发现问题且超过--blocking指定级别时会以失败退出,可以自己写一个会在非零退出码时 abort 的钩子来调用它。

手动只扫已暂存文件

不想依赖钩子、或者只想先验证一次,直接手动运行:

npx react-doctor@latest --staged

该模式的语义(来自 CLI 选项定义):

  • 只读 git 索引(staged)中的文件,不含未暂存的工作区改动;
  • 遵循--project参数和配置中的projects字段——在 monorepo 里,每个选中的包会带各自的package.json/tsconfig/ 配置进入 staged 快照,每条暂存路径恰好归属一个包;
  • 没有暂存内容时,退出码为 0。

如果暂存内容较多,也可以像普通扫描一样显式传文件路径(README.md 中 "Pass file paths to scan only the files that another CI step selected" 的用法):

npx react-doctor@latest src/a.tsx src/b.tsx

但 pre-commit 场景下推荐--staged,它不需要你自己维护文件清单。

结果判断与已知限制

跑完--staged或提交触发钩子后,按以下文档中明确的行为判断结果:

  1. 配置文件不一致会被拒绝。staged 扫描在 git 索引与工作树的配置不同时会报错退出,而不是用混合快照去扫——目的是防止既漏报又误报。如果你在暂存区里还改了doctor.config.ts之类的配置文件,先确认索引与工作树一致再扫。
  2. git 索引读不出来是硬失败。如果 git 命令失败(缺少 git、仓库损坏、权限错误),--staged会记录警告并明确失败,不会把空结果当成"没有问题";个别无法快照的路径会被报告并跳过,当最终没有任何可扫文件时,运行给出警告并以 0 退出。
  3. 未检测到 React 项目不算干净。若扫描目标里解析不出 React/Preact 运行时,stderr 会输出 "No React project detected at— React rules were gated off; this is not the same as a clean scan.",JSON 报告中reactDetectedfalse。对 pre-commit 这类消费方,这条应理解为"扫描目标选错了",而不是全部通过。
  4. 全仓检查项在 diff/staged 模式下不跑。项目级安全检查等 whole-project 检查会被--staged扫描跳过,这与"只扫暂存文件"的目标一致。

验证是否完成:暂存若干有问题的 React 文件后执行npx react-doctor@latest --staged,确认报告只覆盖暂存文件;再走一次git commit,确认钩子在 stderr 打印了上述 staged regressions 提示、提交按非阻塞设计继续进行。之后按提示运行react-doctor --staged --blocking warning逐项修复即可。更多规则开关可以在项目根目录的doctor.config.ts中配置,见 README.md 的 Configure rules 一节。

【免费下载链接】react-doctorYour agent writes bad React. This catches it项目地址: https://gitcode.com/GitHub_Trending/re/react-doctor

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 22:17:39

PrimeNG Dock 组件完全指南:从基础导航到模拟桌面 UI 实战

PrimeNG Dock 组件完全指南:从基础导航到模拟桌面 UI 实战 【免费下载链接】primeng The Most Complete Angular UI Component Library 项目地址: https://gitcode.com/GitHub_Trending/pr/primeng Dock 是 PrimeNG 提供的一种导航组件,由一组菜单…

作者头像 李华
网站建设 2026/9/15 22:17:29

欧姆龙E6B2编码器STM32驱动:HAL库定时器编码器模式转速读取

简介:欧姆龙E6B2编码器驱动程序基于STM32F1系列与HAL库编写,面向工业自动化和嵌入式开发者,用于精确读取编码器转速与角度,适用于速度、位置反馈控制场景。资源包共215个文件,大小仅1.29MB,主要包含C/H源码…

作者头像 李华
网站建设 2026/9/15 22:16:01

Kuikly跨端实践:把DeepSeek Harness变成手机遥控器

一个周五晚上,我去楼下取快递,手机屏幕亮了好几次。不是消息,是我的 DeepSeek Harness 任务跑完了一轮,我本来想趁排队时间确认一下结果,结果发现手机里除了浏览器和聊天工具,根本没有一个能操作它的入口。…

作者头像 李华
网站建设 2026/9/15 22:15:01

嵌入式Linux标准IO实战:缓冲区、文件编程与日志模块

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/15 22:14:45

Unity Addressable Assets架构原理与实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华