必须同时满足三件事:repo.packagist 是单数、命令末尾显式指定 composer 类型及以 https:// 开头且末尾带 / 的 url、加 -g 参数;否则配置无效,输出非完整 json 即失败。

composer config -g repo.packagist 输出为空或不是 JSON?配置根本没生效
这不是“配置慢”,是 Composer 静默忽略错误写法,自动 fallback 到 packagist.org。必须同时满足三件事:
-
repo.packagist是单数(不是repos.packagist或repositories.packagist) - 命令末尾显式指定
composer类型:比如composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ -
URL必须以https://开头、且末尾带/;写成https://mirrors.aliyun.com/composer会拼出非法路径/composerpackages.json,直接 404 - 必须加
-g,否则只改当前项目目录,换路径就失效
验证标准只有一条:composer config -g repo.packagist 输出必须是完整 JSON,例如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};输出为空、null、纯字符串 URL 或报 Key not found,都说明失败。
日志里还在请求 packagist.org?项目级 repositories 字段在屏蔽全局镜像
只要项目根目录的 composer.json 里存在 "repositories" 字段,无论内容是 []、{} 还是旧源(如已下线的 "https://packagist.phpcomposer.com"),全局镜像都会被彻底丢弃——不提示、不报错、不合并,直接无视。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 快速检查:
composer config repositories,看输出是否是你配的镜像地址 - 搜
composer.json:grep -A5 '"repositories"' composer.json,常见陷阱包括:"repositories": []、"repositories": {"packagist": {}}(对象而非数组) - 临时绕过:
composer config --unset repositories,再跑composer install -vvv看第一行GET请求是否命中镜像域名 - 若需保留私有源又想用阿里云镜像,必须显式写入:
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},并确保它在repositories数组首位
composer update 找不到新版本?元数据缓存没刷新,不是镜像没同步
Composer 默认复用本地 packages.json 缓存,15 分钟内不过期。现象是镜像站网页已显示 monolog/monolog v3.6.0,但执行 composer update monolog/monolog 却返回 Nothing to install or update——你本地压根没发请求。
-
composer clear-cache没用:它删 ZIP 包和部分 provider 缓存,但packages.json会立刻重建并复用旧内容 - Composer ≥ 2.5:直接运行
composer update --refresh,精准丢弃packages.json和provider-*.json,不删已下载包,最安全 - Composer ≤ 2.4:手动删对应缓存目录:
rm -rf $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer - 验证是否生效:
curl -I https://mirrors.aliyun.com/composer/packages.json必须返回HTTP/2 200;再比对响应头Last-Modified和官方源同包页面最后更新时间
curl -I 返回 200 但 composer 还是报错?代理或 DNS 在中间劫持
企业网络常见问题:代理把 https://mirrors.aliyun.com/composer/packages.json 重定向到登录页,或返回 HTML 内容;Composer 解析 JSON 失败后静默退回到旧缓存,导致“包找不到”等假性问题。
- 验证响应体类型:
curl -I -v https://mirrors.aliyun.com/composer/packages.json,必须含HTTP/2 200和Content-Type: application/json;若返回text/html或跳转到人机验证页,就是代理劫持 - 对比直连:
curl --noproxy "*" -I https://mirrors.aliyun.com/composer/packages.json,如果加--noproxy "*"后能返回正常 JSON,说明代理是根因 - 清空 Composer 全局代理:
composer config -g http-proxy "";若确需局部代理,设为http://127.0.0.1:8888 - DNS 劫持确认:
nslookup mirrors.aliyun.com 1.1.1.1(应通),nslookup mirrors.aliyun.com(若超时或报Non-existent domain就是劫持);此时用curl --resolve或/etc/hosts绑定最新 IP
最易被忽略的是缓存路径与实际请求地址不匹配:代理若把请求改写成 https://internal-proxy.company.com/mirrors.aliyun.com/composer/,Composer 就会把元数据缓存到另一个子目录,删错地方白忙活。










