pnpm doctor

添加于: v11.14.0

对 pnpm 的安装及其运行环境执行诊断。

pnpm doctor [--offline] [--benchmark] [--json]

每项检查都会报告如何修复其发现的问题,且当任何检查失败时,该命令会以非零状态码退出。警告不会导致命令失败。

✓ Versions: pnpm 11.14.0, Node.js 22.20.0
✓ Install method: pnpm
✓ Global bin directory: /Users/example/Library/pnpm/bin
✓ Cache directory: /Users/example/Library/Caches/pnpm
✓ Store directory: /Users/example/Library/pnpm/store/v10
✓ Filesystem: available: reflink, hardlink, symlink
✓ Registry connectivity: https://registry.npmjs.org/ (128ms)
✓ Install smoke test: offline "file:" install linked its dependency

All checks passed

检查#

版本#

报告运行的 pnpm 和 Node.js 版本。

安装方法#

报告 pnpm 的安装方式(是作为 pnpm 软件包安装,还是作为 @pnpm/exe 独立构建版本安装),并在 pnpm 由 Corepack 运行时发出警告——因为 Corepack 会自行管理 pnpm 版本,导致 pnpm self-update 命令无法使用。

全局 bin 目录#

检查 pnpm 链接全局可执行文件的目录是否在 PATH 环境变量中且具有写入权限。如果它不在 PATH 中,解决方法是运行 pnpm setup。

缓存目录#

检查 缓存目录 是否可写。

存储目录#

检查 存储目录 是否可写。没有配置存储目录时跳过。

文件系统#

基于存储卷运作的链接策略包括:引用链接(写时复制)、硬链接和符号链接。这决定了包在 node_modules 中的落盘方式以及安装速度——引用链接或硬链接的开销几乎为零,而普通复制则不然。

如果引用链接和硬链接均无法使用,检查程序会发出警告,提示安装过程将回退到复制模式,并建议将存储区放置在与项目相同的文件系统上。

注册源连接性#

向已配置的注册源发送 15 秒超时的 Ping 请求,并报告往返时间。如果无法连接到注册源或注册源返回错误状态,则操作失败;这通常指向网络、代理或身份验证配置方面的问题。

使用 --offline 跳过。

安装烟雾测试#

将一个一次性包作为 file: 依赖项安装到临时目录中,全程完全离线。这会端到端地测试解析、存储和链接路径,并确认正在运行的二进制文件确实能够执行安装操作。

该检查在设计上始终处于离线状态,因此 --offline 选项不会跳过它。

配置项#

--offline#

跳过需要网络访问的检查。

--benchmark#

还有时间文件系统和安装检查,与每个结果一起报告持续时间。

--json#

将结果报告为 JSON。输出是一个对象,其中包含一个 checks 数组,每个条目都有 title、status(pass、warn 或 fail),以及可选的 detail、fix 和 durationMs。

{
  "checks": [
    {
      "title": "Filesystem",
      "status": "pass",
      "detail": "available: reflink, hardlink, symlink",
      "durationMs": 3
    }
  ]
}