composer config -g repo.packagist 静默失效是因为必须同时满足三个硬性条件:键名必须为单数 repo.packagist、第二个参数必须显式写 composer(type 值)、URL 必须 HTTPS 且末尾带 /,缺一则回退官方源且不报错。

直接执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就能生效,但漏掉任意一个硬性条件——比如 -g、键名拼错、URL 少斜杠——都会静默失败,composer install 仍连 packagist.org。
为什么 composer config -g 看似成功却没用?
这不是网络慢,是配置根本没写进正确位置或格式错误。Composer 2.x 对字段名、type 值、URL 格式三者做严格校验,错一个就 fallback 到默认源,且不报错、不提示。
-
repo.packagist必须是单数 —— 写成repos.packagist、packagist.org或repositories.packagist都无效 - 中间的
composer是type值,不是注释或占位符,不能省略,也不能换成https或其他字符串 -
https://mirrors.aliyun.com/composer/末尾的/不能少 —— 少了会请求/composerpackages.json导致 404,然后自动退到官方源 - 必须带
-g,否则只改当前项目composer.json的repositories字段,换目录就失效 - 别用
sudo composer config -g—— 配置会写进/root/.composer/config.json,普通用户运行时读不到
怎么确认镜像真的在用,而不是“以为配好了”?
composer config -g repo.packagist 输出 URL 只代表写入成功,不代表请求真发到了镜像站。要验证实际行为,得看网络日志。
部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...
- 先清缓存:
composer clear-cache - 新建空目录,初始化并拉一个包:
composer init -n && composer require monolog/monolog --no-install -vvv 2>&1 | grep "GET https" - 看到
GET https://mirrors.aliyun.com/composer/packages.json才算真正生效;若出现packagist.org或Could not resolve host,说明 DNS、代理或证书路径有问题 - 也可以跑
composer diagnose,看Repo packagist.org:行显示的 URL 是否为阿里云地址
M1/M2 Mac 上最容易卡住的三个环节
Apple Silicon 设备上,90% 的“配不成功”其实和镜像无关,而是底层环境没对齐。
- PHP 必须是 Homebrew 安装的 ARM64 原生版:
which php应返回/opt/homebrew/bin/php,不是/usr/bin/php(系统自带,≤7.3 且无 OpenSSL) - Composer 必须用官方脚本安装:
curl -sS https://getcomposer.org/installer | php,再sudo mv composer.phar /opt/homebrew/bin/composer并sudo chmod +x;brew install composer自 2023 年起已弃用,M1/M2 上常出 Permission denied 或版本卡死 - PATH 必须包含两处:
/opt/homebrew/bin(找php)和$HOME/.composer/vendor/bin(找laravel、phpunit等全局命令),缺一不可;改完~/.zshrc后必须新开终端
项目级配置比全局更可靠,尤其在 CI 和协作场景
你在终端配好全局镜像,但 GitHub Actions、宝塔后台、Docker 容器里照样连不上——因为它们用的是不同用户的 ~/.composer/config.json。项目级配置可提交 Git,行为一致。
- 进项目根目录(含
composer.json),运行:composer config repo.packagist composer https://mirrors.aliyun.com/composer/(去掉-g) - 它会向
composer.json的repositories字段写入"packagist": {"type": "composer", "url": "..."} - 如果
repositories已是数组([]),命令会报错;需先手动改成对象{},或删掉该字段让命令重建 - 改完必须删掉
vendor/和composer.lock,再跑composer install(不是update)——旧 lock 文件里硬编码了原始源地址
最常被忽略的点:镜像只加速元数据下载,不参与依赖解析。如果 composer install 卡在 Resolving dependencies,和镜像无关,大概率是 composer.json 里写了太宽泛的 PHP 版本约束,或者本地 php -v 版本与要求不匹配。

















