composer 2.2+ 镜像配置生效的前提是 composer config -g repo.packagist 输出完整 json 对象(如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}),否则说明键名错误、漏 composer type 值、url 缺末尾 / 或未加 -g,将静默回退至 packagist.org;必须同步验证 curl -i 响应状态、清理 vendor/ 和 composer.lock、并排除项目级 repositories 覆盖。

composer config -g repo.packagist 输出不对就别往下试了
Composer 2.2+ 只认 repo.packagist 这个精确键名,写成 repos.packagist、repositories.packagist.org 或漏掉 -g 都会静默失效,最终 fallback 到 https://packagist.org。运行后必须看到类似这样的输出:
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
如果返回 null、空行、https://packagist.org 或报错,说明配置根本没写进去。常见原因包括:命令里漏了中间的 composer 类型参数、URL 少了末尾 /、用了 root 用户配但实际以 www 用户执行。
curl -I 测镜像地址比看文档更准
别信“这个镜像应该还活着”,直接测真实响应:
-
curl -I https://mirrors.aliyun.com/composer/packages.json—— 必须返回HTTP/2 200,任何 404、301、超时都说明镜像不可用 -
curl -I https://mirrors.tuna.tsinghua.edu.cn/composer/p/monolog/monolog.json—— 看Last-Modified时间是否在最近 30 分钟内,判断同步是否延迟 - 如果返回 HTML 内容(比如“Not Found”页面)或乱码,基本是用了已下线源,如
https://packagist.phpcomposer.com
注意:URL 末尾缺 / 会导致路径拼成 /composerpackages.json,直接 404;清华、腾讯云等镜像地址必须完整带 /composer/。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
删 vendor 和 composer.lock 比清缓存更重要
composer clear-cache 只清下载缓存,不碰元数据;而 composer.lock 里硬编码了 provider 地址(比如 https://packagist.org/p2/xxx.json),换镜像后 Composer 仍会优先请求这个旧 URL —— 它早就不通了。
- 必须删掉
vendor/和composer.lock(尤其后者) - 再跑
composer install,不是update—— update 会复用 lock 里的坏地址 - 如果项目
composer.json里有repositories字段,哪怕只是空数组,也会屏蔽全局镜像;临时验证可加--no-plugins --no-scripts,或改用composer install -vvv看第一行下载地址
SSL 握手失败常被误报为 404
在 Docker Alpine、老旧 CentOS 或企业内网中,PHP cURL 可能因证书过期或 TLS 版本不兼容导致握手失败,结果 Composer 收不到响应,就统一报 404 或 500。
- 用
openssl s_client -connect mirrors.aliyun.com:443 -servername mirrors.aliyun.com检查证书链是否有效 - 在 CI 或容器中,可临时加
composer config -g secure-http false排查(仅调试,勿上线) - 若用自定义 CA,需确保 PHP 的 openssl.cafile 指向正确路径,否则所有 HTTPS 镜像请求都会失败
真正卡在 404 的地方,往往不是包找不到,而是你连的地址本身已失效、证书断了、或 lock 文件锁死了错误路径 —— 这三处不确认清楚,换十次镜像也没用。










