全局配置需确保执行用户与运行用户一致,否则不生效;推荐项目级配置或临时参数验证镜像,注意URL末尾斜杠及拼写正确性。

直接运行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就能全局生效,90% 的本地开发场景下这是最快解法;但宝塔、CI 或多用户环境里它可能不工作——不是镜像不行,是配置没落到真正执行命令的用户身上。
为什么 composer config -g 有时不生效
全局配置写在 ~/.composer/config.json 里,但「谁在跑命令」决定读哪个文件:
- 你在终端用 root 执行了
composer config -g,但宝塔后台的「一键部署」是以www用户身份运行的,它读的是/www/wwwroot/xxx/.composer/config.json(或/home/www/.composer/config.json),根本看不到 root 的配置 - CI 脚本里用了
sudo composer config -g,结果写进了 root 的配置,而构建容器里实际用的是runner用户,照样失效 -
composer config -g repos.packagist(多了一个s)这种拼写错误会静默写入无效字段,composer config -g repo.packagist查出来是空,但命令不报错,你根本意识不到配错了
composer.json 里加 repositories 更可靠
进项目根目录,运行这条命令:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
它会自动往 composer.json 的 repositories 字段里安全追加,不覆盖已有私有源。适合团队协作和 CI 场景,因为 composer.json 可以提交到 Git,所有人拉代码后行为一致。
- 如果项目已有
"repositories": {}(空对象),命令会 merge 进去;如果是数组格式(如"repositories": []),命令会报错,得先手动改成对象 - 别手写
"packagist.org": false—— 这会彻底关掉官方源,一旦镜像临时不可用,composer install直接失败 - 改完记得删掉
vendor和composer.lock再重装,否则旧 lock 文件里的 hash 可能和镜像元数据不匹配
临时换镜像只对当次命令有效,适合排查
不想动任何配置,又想验证某个镜像是否可用?加 --repository-url 参数:
composer install -vvv --repository-url=https://mirrors.huaweicloud.com/repository/php/composer/
-vvv 是关键,它会打印真实请求地址,比如看到 GET https://mirrors.huaweicloud.com/repository/php/composer/p2/monolog/monolog.json 才算真正走镜像。
- 这个参数优先级最高,会覆盖全局和项目级配置
- 只对
install、update、require(注意:不是require后加参数,而是composer require foo/bar前加)生效 - 别用已停更的
https://packagist.phpcomposer.com,现在访问直接 404
验证镜像是否真在用,别信“命令跑完了”
执行 composer config -g repo.packagist 输出应为完整 JSON 对象,例如:
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
如果返回空、null 或报错,说明配置根本没写对。更硬核的验证方式是跑一次 composer install -vvv,搜日志里的 GET 请求域名——看到 mirrors.aliyun.com 才算数。
- URL 末尾斜杠不能少:
https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(会拼成/composerpackages.json导致 404) - 华为云地址路径特殊:
https://mirrors.huaweicloud.com/repository/php/composer/,漏掉/repository/php/会 404 - Composer 1.x 和 2.x 都认
repo.packagist,但千万别写成repos.packagist或mirror,官方根本不识别











