执行composer config -g repo.packagist,输出必须是包含"type": "composer"和国内url的json对象才算真正生效;若为空、null或https://packagist.org,说明仍走官方源,且repo.packagist键名不可写错(如repos.packagist会静默失效),项目级配置优先级更高,composer diagnose显示ok不代表镜像可用,需用curl -i验证返回200。

怎么确认当前用的是哪个镜像源
执行 composer config -g repo.packagist,输出必须是包含 "type": "composer" 和国内 URL 的 JSON 对象,才算真正生效。如果返回空、null 或 https://packagist.org,说明还在走官方源。
注意:repo.packagist 是固定键名,少个 s(比如写成 repos.packagist)在新版 Composer 中会静默失败,不报错也不写入,极易误判。
- 项目级配置优先级更高——哪怕全局配好了,只要当前目录
composer.json里有repositories字段,就会被覆盖,且不提示 -
composer diagnose显示 “OK” 不代表镜像可用,它只校验语法和本地连通性,不验证元数据是否完整或是否支持 Composer 2.9+ - 验证镜像真实可用:运行
curl -I https://mirrors.aliyun.com/composer/packages.json,必须秒回200 OK;若超时或返回503,得换源
阿里云、清华、SJTUG、php.cnpkg 四个主流源实测差异
截至 2026 年 7 月,这四个镜像均支持 HTTPS 和 Composer 2.9.6,但同步节奏、地域适配和稳定性表现不同:
-
https://mirrors.aliyun.com/composer/:通用性最强,华南/华东/华北用户基本无感延迟;Laravel、Symfony 等主流框架包同步及时,但小众私有包(如某些 GitHub 私仓)偶尔滞后 1–2 小时 -
https://mirrors.tuna.tsinghua.edu.cn/composer/:教育网和北方地区访问极快,南方部分用户偶发 DNS 解析慢;对 PHP 8.4 新增函数签名兼容性验证更严格,有时比阿里云晚几小时上线新版本 -
https://packagist.mirrors.sjtug.sjtu.edu.cn/:学术网络运维,无商业更新节奏干扰;适合 CI/CD 流水线等对稳定性要求高于速度的场景;但需确认出口 IP 是否在教育网白名单内,否则可能返回403 -
https://php.cnpkg.org:2026 年起更新最勤,Laravel 11 和 monorepo 类包几乎当天入库;非官方源,但实测composer require失败率最低;缺点是文档弱,出问题只能靠社区反馈
不推荐再用 https://packagist.phpcomposer.com 或 https://packagist.laravel-china.org——前者自 2025 年底起频繁 502,后者已停止维护,composer update 会直接报 Repository not found。
全局配置 vs 项目级配置:什么时候该用哪一种
全局配置适合个人开发环境或团队统一初始化脚本;项目级配置更适合协作项目或需要显式声明源地址的 CI 场景。
- 全局命令:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,写入~/.composer/config.json(Windows 在%USERPROFILE%\AppData\Roaming\Composer\config.json),后续所有项目默认生效 - 项目级命令:
composer config repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/,会向当前composer.json写入repositories字段,仅影响当前项目,且能随代码提交被团队共享 - 如果之前用过旧写法
composer config -g repositories.packagist,会与新配置冲突,建议先执行composer config -g --unset repositories.packagist清理 - GitHub Actions 等 CI 环境默认不读全局配置,需在 workflow 中显式设置
COMPOSER_HOME或使用项目级配置
换源后还是慢?这些隐藏坑比镜像本身还关键
镜像源只是第一步。换完源仍卡在 downloading 或 loading composer repositories,大概率是以下配置没调好:
-
parallel-downloads默认值是3,太低。运行composer config -g parallel-downloads 10提升并发,但别设到20——高并发可能触发file_put_contents(/tmp/): failed to open stream,降到6–8更稳 - 确认 Composer 版本:
composer --version。若是1.x(如1.10.22),必须先升级:composer self-update --prefer-dist - 已装过
hirak/prestissimo的必须卸载:composer global remove hirak/prestissimo,它在 Composer 2.x 中已失效,甚至会静默降级为单线程 - vendor 存在但 install 还慢?问题不在网络,而在本地 I/O 和 autoload dump 阶段。关掉 classmap-authoritative:
composer config authorative false(注意拼写是authorative,不是authoritative)
镜像源选型本身不难,难的是把配置、版本、并发、缓存、autoload 这几层全部对齐——漏掉任意一层,都可能让“秒级安装”退回“分钟级等待”。











