-vvv会输出真实HTTP请求路径,如Downloading https://mirrors.aliyun.com/composer/p2/monolog/monolog.json等,这才是镜像是否生效的铁证;若出现packagist.org或过期域名则说明镜像未生效或失效。

composer install -vvv 会输出哪些关键网络请求信息
加 -vvv 不是为了看进度条,而是为了捕获真实 HTTP 请求路径。Composer 在解析完依赖后,会依次发起元数据请求(packages.json)、包清单(dist 或 source)和 ZIP 下载,这些 URL 才是镜像是否生效的铁证。
真正要盯住的是日志里带 GET 和 Downloading 的行,比如:
Downloading https://mirrors.aliyun.com/composer/p2/monolog/monolog.json Downloading https://mirrors.aliyun.com/composer/dist/monolog/monolog/1.27.1.0/monolog-1.27.1.0-zip-fa3b2.zip
如果看到 packagist.org 或 repo.packagist.org,说明镜像没接管;如果看到过期域名如 phpcomposer.com,说明镜像地址已失效。
-
composer install -vvv必须配合clear-cache使用,否则可能复用旧缓存里的官方源地址 - 输出中若含
Using repository packagist.org,大概率是项目级composer.json里写了"packagist.org": false或空repositories数组,压过了全局配置 - Windows 用户注意:PowerShell 默认不显示 stderr,需加
2>&1才能捕获完整日志,例如:composer install -vvv 2>&1 | findstr "GET Downloading"
为什么 composer diagnose 不能代替 -vvv 验证镜像
composer diagnose 只检查配置语法和本地环境,它不会触发任何网络请求。即使输出 Repo packagist.org is default,也不代表当前命令真在用官方源——它只是说“没显式配置 repo”,而全局镜像恰恰是通过 repo.packagist 键绕过这个判断逻辑的。
更麻烦的是,diagnose 对项目级配置无感知:哪怕 composer.json 里明明白白写了阿里云地址,只要没触发真实下载,它仍可能报 OK 却实际走错源。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 执行
composer config -g repo.packagist输出非空 ≠ 镜像生效,只说明字段写进去了 -
composer show -v看前几行日志比diagnose更可靠,但它仍不如-vvv直接抓到 HTTP 请求头 - CI 脚本里别信
diagnose结果,必须跑一次composer require monolog/monolog -vvv --no-install(仅解析不下载)来确认 URL 域名
监控中文镜像数据流时容易忽略的三个底层干扰点
你以为看到 mirrors.aliyun.com 就万事大吉?未必。真实链路里还有三处常被跳过的环节:
- PHP 的
openssl和zlib扩展必须启用,否则-vvv日志里会出现failed to open stream: operation failed,但错误被吞掉,只表现为卡在某个包不动 - 某些企业防火墙或代理会重写 HTTPS SNI,导致镜像域名解析失败,此时
-vvv会显示Connection refused或超时,而非 404 —— 这不是镜像问题,是中间层拦截 -
composer.lock文件里记录的是包哈希和原始源地址,换镜像后不删 lock 文件,install会跳过解析直接按旧地址拉包,造成“明明配了镜像却还是慢”的假象
临时验证镜像是否可用,别动配置文件
想快速测一个新镜像地址是否通,又不想污染全局或项目配置?用 --repository-url 参数最干净:
composer clear-cache && composer require monolog/monolog --repository-url=https://mirrors.aliyun.com/composer/ -vvv 2>&1 | grep -E "(GET|Downloading)"
这条命令不改任何配置,只对本次请求生效。注意:create-project 不支持该参数,必须先 config -g 再跑。
-
--repository-url优先级高于全局配置,也高于项目composer.json中的repositories,适合排查覆盖关系 - URL 必须以
https://开头且末尾带/,漏掉斜杠会导致请求/composerpackages.json而不是/composer/packages.json,返回 404 - 测试完记得删掉
vendor和composer.lock,否则下次install仍会复用旧锁文件里的地址
真正难的不是配命令,而是区分「配置写进去了」和「请求真发出去了」。每次换镜像,盯着 -vvv 里那几行 GET 才算落地,其他都是幻觉。

















