换镜像源可大幅提速,但必须严格满足三个条件:repo.packagist(单数)、type值为composer、url以https://开头且末尾带/;否则静默回退官方源;验证需执行composer config -g repo.packagist,输出必须是完整json对象。

直接换镜像源,不改代码、不调网络,就能让 composer install 从卡顿 3 分钟降到 20 秒以内——前提是写对 repo.packagist 配置,否则等于没配。
为什么换镜像后还是慢?根本没走镜像
绝大多数“配了还是慢”的情况,不是网络问题,是 Composer 根本没读到你的镜像配置。它静默 fallback 回 https://packagist.org,你完全看不到错误提示。
-
repo.packagist键名不能多一个s(repos.packagist❌) - 第二个参数必须是
composer(类型声明,漏掉就回退官方源) - URL 必须用 HTTPS 且末尾带
/(https://mirrors.aliyun.com/composer/✅,少斜杠会 404) - 验证是否生效:运行
composer config -g repo.packagist,输出必须是完整 JSON,形如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
宝塔/CI 环境里全局配置为啥不生效?用户权限不对
你在终端用 root 配了 -g,但宝塔「一键部署」或 GitHub Actions 的 runner 默认以 www 或 runner 用户运行,压根读不到 root 的 /root/.composer/config.json。
- 查实际执行用户:
whoami或看 CI 日志里的 UID - 给 www 用户单独配:
sudo -u www composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - CI 脚本里别依赖全局配置,改用临时参数更可靠:
composer install --repository-url=https://mirrors.cloud.tencent.com/composer/ --no-interaction --prefer-dist
项目级配置怎么避免清空私有仓库?别用命令覆盖
执行 composer config repo.packagist composer ...(不加 -g)会**全量替换** composer.json 中的 repositories 字段,已有的 Git 私仓、Satis 源全被删掉。
- 已有私有源?手动编辑
composer.json,在"repositories"数组里追加一项:{"type": "composer", "url": "https://mirrors.cloud.tencent.com/composer/", "packagist": false} - 同时确保顶层写
"packagist.org": false(不是放在repositories里),否则私有包 + 镜像共存时可能校验失败 - 改完删掉
vendor/和composer.lock,再跑composer install—— 旧 lock 文件记录的是旧源哈希,和新镜像元数据不兼容
部署脚本里漏了这两个参数,速度直接打五折
--no-interaction 和 --prefer-dist 不是可选项,是生产环境部署的硬性要求。
-
--no-interaction:CI/CD 没有 TTY 终端,不加这个,composer install会在交互提示上卡死 -
--prefer-dist:强制走压缩包(tarball),比--prefer-source(克隆 Git)快 3–5 倍;镜像站只同步 dist 包,不加这个可能 fallback 到慢速源 - 完整推荐命令:
composer install --no-interaction --prefer-dist --optimize-autoloader
最易被忽略的一点:镜像只加速下载和元数据拉取,不影响 Resolving dependencies 阶段。如果 composer update 卡在这里几十秒,和镜像无关,得去查 composer.json 里有没有模糊版本约束(比如 "^1.0 || ^2.0")或者本地插件冲突。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











