packagist.org在国内因dns污染、tls握手阻塞及无cdn节点导致刚性不可达,必须配置国内镜像;需严格满足键名repo.packagist、type值composer、url以https://开头且末尾带/三条件,并执行composer clear-cache验证生效。

packagist.org 在国内基本不可达,不是“慢一点”,而是 DNS 解析常超时、TLS 握手失败率高、无 CDN 节点支撑——composer install 卡在 Loading composer repositories 超 90 秒,就是它根本没连上。
为什么直连 packagist.org 必然卡住
这不是你家宽带问题,也不是代理没开好,是物理层限制:
-
packagist.org域名在国内解析常指向海外 IP,中间链路不稳定,curl -I https://packagist.org/packages.json实测多数环境超时或卡 10 秒以上 - Composer 2.x 默认拒绝 HTTP,且对 TLS 握手失败无重试机制,一次失败就停住,不报错也不 fallback
- 元数据请求(如
/packages.json、/provider-laravel~11.0.json)必须完整加载才能进入依赖解析阶段,卡在这步 = 根本还没开始下包
composer config -g repo.packagist 必须写对三要素
写错一个字符,配置就等于没配,而且不报错、不提示:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 键名必须是
repo.packagist(不是repos.packagist,多一个s就静默失效) - type 值必须显式写
composer,命令里不能漏掉这个参数:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - URL 必须是 HTTPS 且末尾带
/:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(会 404 或 fallback 回官方源)
换源后不 clear-cache 等于白配
Composer 缓存的是元数据 URL 和响应内容,旧缓存仍指向 packagist.org:
- 执行完镜像配置后,必须立刻运行
composer clear-cache - 验证是否生效:运行
composer config -g repo.packagist,输出应为完整 JSON,形如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 如果输出是空、
null或只有一串 URL 字符串,说明配置未落地;如果仍是https://packagist.org,说明没生效或被项目级repositories覆盖了
项目级配置优先级高于全局,但容易踩坑
哪怕你全局配好了,只要当前项目 composer.json 里有 repositories 字段,就会直接覆盖全局设置,且不报错:
- 检查方式:运行
composer config -g repos.packagist(注意是repos,不是repo)——如果返回空,说明全局配置写错了键名 - 项目级正确写法是在
composer.json的repositories对象里加一条:"packagist": { "type": "composer", "url": "https://mirrors.aliyun.com/composer/" },同时根节点写"packagist.org": false - 别用
composer config repo.packagist(不加-g)去覆盖已有repositories,它会全量替换,清掉你配的私有 Git 源
composer install -vvv 日志里依然能看到 Downloading https://packagist.org/... —— 那就是没真正切过去。










