composer diagnose 能检查 composer.json 语法、vendor 权限、GitHub API 访问、CA 证书、openssl/zip 扩展等基础环境问题,但不验证依赖解析、autoload 或插件兼容性。

composer diagnose 命令能查出哪些问题
composer diagnose 是 Composer 自带的环境自检工具,它不安装或更新包,只检查本地配置、权限、网络连通性等基础运行条件。它适合在执行 composer install 或 composer update 失败前快速定位根因。
常见被识别的问题包括:
- composer.json 语法错误或缺失
- vendor/ 目录权限不足(尤其 macOS/Linux)
- GitHub API 限流或未配置 auth.json
- CA 证书不可用导致 HTTPS 请求失败(如公司代理拦截)
- openssl 扩展未启用或版本过低
- zip 扩展缺失(影响 ZIP 包解压)
运行 diagnose 时必须注意的前置条件
这个命令默认只检查当前目录下的 composer.json 和 vendor/,不会自动向上查找项目根目录。如果你在子目录里执行,它可能报 “No composer.json found”,这不是 bug,是设计如此。
- 确保你在项目根目录(即含
composer.json的目录)下运行composer diagnose - 如果项目使用了自定义
COMPOSER环境变量(比如指向composer.local.json),需显式传参:composer diagnose -c composer.local.json - 某些共享主机禁用了
exec()或proc_open(),会导致检测跳过网络/扩展项,输出中会提示 “Skipped” —— 这不是通过,是无法验证
诊断失败后怎么针对性修复
输出里每行以 [OK] 或 [FAIL] 开头,失败项后面通常带简短说明。重点看带 [FAIL] 的行,不要直接重装 Composer。
- 若提示
The openssl extension is missing:确认 PHP 配置中extension=openssl已启用,且没被;extension=openssl注释掉 - 若提示
GitHub API is not working:先运行curl -I https://api.github.com/rate_limit看是否返回 200;再检查~/.composer/auth.json是否存在有效 token - 若提示
vendor/ directory permissions:Linux/macOS 下常用chmod -R u+rwX vendor/,Windows 用户可忽略此项(但需确认杀毒软件没锁定文件) - 若提示
CA bundle not found:设置export COMPOSER_CAFILE=/path/to/cacert.pem(Linux/macOS)或在php.ini中配置openssl.cafile
diagnose 不报错 ≠ 环境完全正常
composer diagnose 是轻量级检查,它不验证包依赖解析逻辑、不测试插件兼容性、也不模拟真实安装流程。比如:
- 它不会发现
composer.json中写错的require-dev版本约束(如"php": ">=8.2"却在 PHP 8.1 下运行) - 它不校验
autoload配置是否真能加载类(常见于 PSR-4 路径映射错误) - 它跳过所有自定义 installer 或 plugin 的初始化检查
所以当 diagnose 显示全绿但仍报错时,下一步该看 composer install -v 的详细日志,而不是反复跑 diagnose。










