composer config -l 显示当前项目最终生效的合并配置,优先读取项目 composer.json 并叠加全局配置和环境变量,但不标注来源;加 --global 查全局显式设置项,不显示默认值。

composer config -l 查看所有配置项
直接运行 composer config -l 就能列出当前项目(或全局)生效的所有配置,包括你手动设的、默认值、以及 Composer 自动推导出的路径(比如 home、bin-dir)。它不区分作用域,默认只显示项目级配置;加 -g 才查全局配置:composer config -lg。
注意:这个命令输出的是「当前生效值」,不是配置文件原始内容。如果某项在 composer.json 和 auth.json 里都定义了,它显示的是最终合并结果。
- 想快速定位某个配置?用管道过滤:
composer config -l | grep repositories - 配置值含敏感信息(如 token)时,
-l默认会隐藏,改用--show-passwords才能看见 - 输出里带
(global)标记的,说明该值来自全局配置,不是当前项目
composer diagnose 检查环境是否正常
composer diagnose 是 Composer 内置的健康检查工具,它不只看配置,还会探测 PHP 版本、openssl、zlib、phar 等扩展是否可用,以及缓存目录、CA 证书、远程仓库连通性等。它比手动查 php --ini 或 curl -I https://packagist.org 更省事。
常见误判点:它把「无法访问 packagist.org」直接标为 ERROR,但如果你在国内且已配置国内镜像(如阿里云),这其实是正常现象——别急着重装,先确认 composer config repo.packagist 是否指向了镜像地址。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 加
-v可看到更详细的检测步骤和失败原因 - 若提示
open_basedir restriction in effect,说明 PHP 配置限制了 Composer 访问临时目录,需调整open_basedir - 诊断通过 ≠ 能装包,它不校验
composer.lock一致性,那得靠composer validate
composer show --platform 查看本地 PHP/扩展环境
当你怀疑是 PHP 环境导致依赖安装失败(比如报 ext-gd not found),composer show --platform 能一次性列出所有已加载的 PHP 扩展及其版本,还有 PHP、libxml、iconv 等核心组件信息。它比 php -m 更聚焦于 Composer 实际依赖的部分。
这个命令不读配置,纯查运行时环境。所以即使你在 composer.json 里写了 "ext-gd": "*",只要这里没显示 gd,安装就会中断。
- 输出中带
[dev]的扩展(如pcntl [dev])表示仅 CLI 模式可用,Web SAPI 下不可用 - 某些 Docker 环境里,CLI 和 FPM 的 PHP 配置不同,务必确认你执行
composer时用的是哪个php二进制 - 如果需要导出环境快照用于协作排查,可加
--format=json
配置修改后如何验证是否生效?
改完 composer config 或编辑 composer.json 后,别急着跑 install。先用 composer config key.name 单独查某一项,比如 composer config repos.packagist,确认值是你刚设的。再配合 composer diagnose 看整体状态。
最容易被忽略的是作用域叠加问题:项目配置、全局配置、环境变量(COMPOSER_HOME)、甚至 ~/.composer/config.json 和项目根目录下的 composer.json 会逐层合并。一个配置项可能被多处定义,最终生效的是优先级最高的那个。
- 环境变量优先级最高,例如设了
COMPOSER_CACHE_DIR=/tmp/composer-cache,composer config cache-dir就会返回这个路径 -
composer config --list --format=json能看到每项配置的来源(source字段),这是调试冲突的唯一可靠方式 - 删配置别用文本编辑器直接改 JSON,要用
composer config --unset key.name,否则格式错误会导致后续命令全挂

















