唯一可靠验证镜像状态的方式是直接 curl 测 /packages.json 接口,返回 http 200 且 content-type: application/json 表明镜像在线可读;配置必须为 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},项目级 repositories 会屏蔽全局配置,改配置后须执行 composer clear-cache。

直接 curl 测 /packages.json 接口才是唯一可靠方式
别信 composer diagnose,它强制连 packagist.org,和你配的镜像完全无关。真正能反映镜像状态的,只有对镜像地址发起一次真实 HTTP 请求。核心是测 /packages.json 这个端点——Composer 每次初始化仓库都从这里拉元数据。
正确命令:curl -I https://mirrors.aliyun.com/composer/packages.json
- 返回
HTTP/2 200或HTTP/1.1 200 OK,且Content-Type: application/json→ 镜像在线、可读 - 返回
HTTP/2 404→ URL 错(比如少写了/composer/后缀,或用了已停用的旧地址如https://packagist.phpcomposer.com) - 超时或
Could not resolve host→ DNS 或网络层问题,不是镜像本身挂了 - 返回 HTML 页面(比如带验证码的跳转页)→ 公网访问被拦截,生产环境应换阿里云或腾讯云源
composer config -g repo.packagist 输出必须是完整 JSON
配置写错 = 没配。执行后输出必须形如:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。任何偏差都会导致静默回退到官方源。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 键名必须是
repo.packagist(单数,不是repos.packagist或repositories.packagist.org) -
type值必须显式写成"composer",不能省略或为空字符串 - URL 必须以
https://开头,且末尾带斜杠/;https://mirrors.aliyun.com/composer会拼出错误路径导致 404 - 如果输出为空、
null、或仍是https://packagist.org/,说明配置根本没写进去
项目级 repositories 字段会彻底屏蔽全局镜像
哪怕你全局配好了阿里云镜像,只要项目根目录 composer.json 里存在 "repositories" 字段(哪怕值是空数组 []、{},甚至 "packagist.org": false),全局配置就完全失效。
- 检查方法:
grep -A5 '"repositories"' composer.json - 临时验证:
composer config --unset repositories(注意没-g),再跑composer install -v看日志是否出现镜像域名 - CI/CD 环境(如 GitHub Actions)默认不继承本地全局配置,必须在 workflow 中显式执行上述
config命令
缓存不清,新镜像永远不生效
改完配置后不清理缓存,Composer 仍会从旧缓存里读 packages.json 和 provider 列表,请求路径还是旧地址——这不是网络慢,是状态污染。
- 必做:
composer clear-cache - 更彻底:手动删缓存目录,例如 Linux/macOS 下
rm -rf ~/.composer/cache/repo/https---packagist.org/ - 验证是否真走新源:
composer show -p -v,看控制台顶部是否打印类似Downloading https://mirrors.aliyun.com/composer/packs/...的日志
repositories 是否干扰、缓存是否清干净。其余诸如 TLS 握手失败、DNS 污染、插件接管等,都得先过这三关再说。










