Skip to content

repoctl doctor 诊断 ​

repo doctor 用来判断当前目录是不是一个可维护、可开发、可接入 repoctl 工作流的 pnpm monorepo 根目录。默认只读、离线,不执行 pnpm/Corepack、不激活或下载包管理器、不安装依赖、不修改清单或锁文件;显式 --out 仅写出指定报告。

1. 状态含义 ​

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

CI 中推荐使用:

bash
repo doctor --strict

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

2. 核心检查项 ​

检查项通过标准常见修复
package-json当前 workspace 根目录存在 package.json回到仓库根目录或先初始化项目
workspace-manifest存在 pnpm-workspace.yamlrepo init --yes
node-version当前 Node 满足 engines.node切换 Node 版本或补充 engines
node-version-files已有 .nvmrc、.node-version 与 Node、engines 彼此一致统一数字版本声明;别名无法离线解析时为 warn
package-manager根 packageManager 固定 pnpm 版本设置 pnpm@<版本>
pnpm-version观测到的 pnpm 与声明一致手动选择 pnpm 后运行 pnpm exec repo doctor
lockfile-sync根及 workspace 清单依赖与锁文件一致检查变更,再手动执行 pnpm install
installation-statepnpm 元数据、安装锁文件和必需的直接依赖清单一致手动使用声明版本重新安装
tool-package根依赖包含 repoctlpnpm add -D repoctl
root-scripts存在 repo:init、repo:new、repo:check、repo:doctor 根脚本repo init --yes
config-file使用 repoctl.config.ts,且没有残留 monorepo.config.ts保留 repoctl.config.ts
commit-hooksLefthook 配置完整且没有旧工具残留repo upgrade --yes
tooling-imports配置不再引用本地源码 loader 或旧 config wrapperrepo upgrade --yes
workspace-patterns常见目录被 workspace patterns 覆盖repo init --yes
workspace-package-coverage常见目录下的包都被 pnpm 覆盖repo init --yes

Node 版本文件可选,不存在时无需新增。数字版本冲突为 fail,无法解析的 lts/* 等别名为 warn。warn 也表示证据不足,不意味着已经确认健康。

建议通过 pnpm exec repo doctor 提供 pnpm 启动证据。报告会标记继承的 npm_config_user_agent 来源,这类证据可能被覆盖或过时。独立调用时,仅静态读取 PATH 上可识别的 pnpm 包元数据;Corepack shim 或无法识别的独立启动器返回未知,不执行启动器。env info、snapshot 和 support 也使用相同观测方式。

锁文件检查支持 pnpm v9 格式,包括 pnpm 12 的独立包管理器文档、workspace 协议、默认和命名 catalog,以及自动安装的 peer(显式依赖类型优先)。Workspace override 配置独立于清单依赖声明进行对照。明确的清单不匹配为 fail,缺失/损坏/不支持的格式或无法验证的 override、pnpmfile 转换为 warn。安装检查支持使用 isolated node linker 的 pnpm layout version 5,读取 .modules.yaml 中的 virtual store 路径,比较锁文件记录并检查必需的直接依赖清单。未安装、部分安装、只有 node_modules 却无可识别元数据均为 warn;版本、锁文件或直接依赖明确不一致为 fail。检查不验证所有包内容、传递依赖链接、平台可选依赖、生命周期脚本或外部 store 完整性。

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

自动化脚本推荐使用 pnpm run repo:doctor -- --json 或 pnpm exec repo doctor --json。

输出适合场景
默认交互文本本地直接阅读
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. 然后补根脚本、Lefthook 钩子。
  4. 最后整理 workspace patterns 与 tooling imports。

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