composer 2.2+ 已弃用 repo.packagist,须改用 repositories.packagist.org 并配置完整 json;项目级 repositories 会覆盖全局镜像;composer.lock 中 url 不随镜像自动更新,需删 lock 或运行 composer update --lock。

composer config -g repo.packagist 在新版里根本不会生效
Composer 2.2+ 已静默弃用 repo.packagist 这个键名,命令执行不报错,但配置被完全忽略——你看到 composer install 还在请求 packagist.org,不是网络慢,是压根没读到配置。
必须改用新键名:repositories.packagist.org,且值必须是完整 JSON 字符串:
composer config -g repositories.packagist.org '{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}'- 双引号不能省,
type必须显式写"composer"(不是"packagist"或空) - URL 末尾的
/缺一不可,否则会拼出/composerpackages.json导致 404
项目级 repositories 会彻底覆盖全局设置
哪怕你全局配对了,只要项目根目录的 composer.json 里有 "repositories" 字段,Composer 就直接无视全局镜像——包括空数组 "repositories": [] 或只禁用了 packagist 的写法。
检查方法:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
grep -A 5 '"repositories"' composer.json看是否定义了该字段 - 临时绕过:加
--no-plugins --no-scripts参数测试,或删掉整个repositories段再试 - 若需保留私有源,建议把镜像也写进项目级配置,而不是依赖全局
换源后 vendor 还是走旧地址?锁文件没刷新
composer.lock 里固化的是包的实际下载 URL(比如 dist.url),它不随镜像配置动态更新。即使你切了阿里云源,composer install 仍会从 lock 文件里读原来的 packagist.org 地址。
必须做其中一项:
- 删掉
vendor/和composer.lock,再跑composer install - 或轻量处理:
composer update --lock,它会重新解析依赖并重写 lock 中的 dist URL - 注意:如果项目用了
fxp/composer-asset-plugin(如老版 Yii2),它根本不走 Composer 镜像逻辑,得单独处理 Bower/NPM 源
HTTPS 证书和内网地址容易被忽略
国内镜像全站 HTTPS,但某些企业网络、老旧系统或 Docker 容器里证书链不全,会触发 cURL error 60 或 Could not resolve host,这不是镜像问题。
还有两个关键细节:
- 阿里云 ECS 内网用户应改用 HTTP 内网地址:
http://mirrors.cloud.aliyuncs.com/composer/(公网 HTTPS 反而慢且耗流量) - 清华旧镜像
https://packagist.phpcomposer.com已下线,继续用会稳定报错,必须换成 USTC 新地址:https://packagist.mirrors.ustc.edu.cn/ - 华为云镜像支持 IPv6,教育网用户优先选它;腾讯云默认开启 fallback(找不到包时自动试官方源),更适合 CI 流水线










