Skip to content

repoctl doctor 诊断

repo doctor 用来判断当前目录是不是一个可维护、可开发、可接入 repoctl 工作流的 pnpm monorepo 根目录。

1. 状态含义

状态含义对退出码的影响
pass检查通过不影响
warn存在建议修复项默认不失败,--strict 下失败
fail阻塞项命令返回失败状态

CI 中推荐使用:

bash
repo doctor --strict

这样 warning 不会长期堆积成隐性风险。

2. 核心检查项

检查项通过标准常见修复
package-json当前 workspace 根目录存在 package.json回到仓库根目录或先初始化项目
workspace-manifest存在 pnpm-workspace.yamlrepo setup --yes
node-version当前 Node 满足 engines.node切换 Node 版本或补充 engines
tool-package根依赖包含 repoctl@icebreakers/monorepopnpm add -D repoctl
root-scripts存在 setupnewcheckdoctor 根脚本repo setup --yes
config-file只存在一种配置文件保留 repoctl.config.ts
commit-hooksHusky 和 lint-staged 同时就绪repo upgrade --yes
tooling-imports配置不再引用本地源码 loaderrepo upgrade --yes
workspace-patterns常见目录被 workspace patterns 覆盖repo setup --yes
workspace-package-coverage常见目录下的包都被 pnpm 覆盖repo setup --yes

3. 输出报告

bash
repo doctor
repo doctor --json
repo doctor --markdown --redact
repo doctor --json --out reports/doctor.json
repo doctor --markdown --redact --out reports/doctor.md
输出适合场景
默认交互文本本地直接阅读
JSONCI、编辑器、脚本消费
Markdown粘贴到 issue、PR 或排障文档
--redact分享报告前隐藏本机绝对路径

4. strict 模式

--strict 会把 warning 也视为失败。它适合放在 CI 早期阶段:

bash
pnpm install --frozen-lockfile
repo doctor --strict
repo check --full

如果你正在接入存量仓库,建议先不用 strict,把报告保存下来逐项修复:

bash
repo doctor --markdown --redact --out reports/doctor.md
repo upgrade --no-overwrite
repo doctor

5. 排查顺序

建议按阻塞程度处理:

  1. 先处理 fail,否则命令或 CI 很可能无法继续。
  2. 再处理配置冲突和 Node 版本问题。
  3. 然后补根脚本、hook 和 lint-staged。
  4. 最后整理 workspace patterns 与 tooling imports。

如果不确定报告能否安全分享,使用 报告与自动化输出 里的 --redactenv support