执行 composer config -g --unset repos.packagist 不会自动恢复官方源,必须显式配置 composer config -g repo.packagist composer https://packagist.org 才能启用 packagist.org。

执行 composer config -g --unset repos.packagist 后,官方源并不自动恢复
这是最常被误解的一点:删掉 repos.packagist 配置项 ≠ 恢复 packagist.org 官方源。Composer 的默认行为不是靠这个键“启用”,而是靠隐式 fallback 机制——只有当你没显式禁用、也没覆盖它时,才走官方源。一旦你之前设过 "packagist": false 或者手动加过其他 type 的源(比如 "type": "artifact"),删掉 repos.packagist 后,Composer 就真找不到主源了。
- 现象:运行
composer require monolog/monolog --dry-run报错Could not find package,或composer show -p输出为空 - 原因:
repos.packagist被删后,全局配置里没了可用的 composer 类型主源,fallback 失效 - 正确做法:必须显式补回官方源,命令是
composer config -g repo.packagist composer https://packagist.org - 注意拼写:
repo.packagist(不是repos.packagist)是 Composer 识别主源的固定键名;type必须是composer,不能省略
如何确认当前真的在用官方源?别只看配置列表
composer config -g --list 显示 repos.packagist 存在,并不代表它正在生效——项目级配置、插件、甚至 composer.json 里的 repositories 字段都可能覆盖它。
- 实测才是关键:运行
composer diagnose,最后一行应为OK,且输出中 “Repo:” 后明确显示https://packagist.org - 再跑一次
composer clear-cache && composer show -p | head -3,应该能立刻列出真实包(如composer/composer、monolog/monolog),而不是卡住或报错 - 检查项目根目录
composer.json是否含"repositories"字段——哪怕只写了{"packagist": false},也会彻底屏蔽官方源
重置镜像配置的完整动作链:缓存、配置、锁文件一个都不能少
只执行 composer config -g --unset repos.packagist 是半吊子操作。Composer 的行为由三处共同决定:全局配置、本地 composer.json、以及缓存中的元数据。漏掉任何一项,都可能让旧镜像“阴魂不散”。
- 先清缓存:
composer clear-cache(基础),再手动删掉composer config --global cache-dir返回的整个目录(彻底) - 再重置配置:
composer config -g repo.packagist composer https://packagist.org(不是 unset) - 如果是在某个项目里恢复,默认源还可能被
composer.lock锁死旧镜像下载记录,建议删掉composer.lock和vendor/后再composer install - 验证时避免干扰:不要用
--no-plugins或--ignore-platform-reqs,这些参数不影响源选择逻辑
为什么有时候 composer create-project 还是走镜像?
因为部分项目模板(尤其是私有脚手架或老版本 Laravel)会在自带的 composer.json 里硬编码 "repositories",导致第一次拉取就绕过你的全局设置。
- 现象:
composer create-project laravel/laravel demo卡在下载laravel/framework,网络请求目标却是阿里云地址 - 原因:模板的
composer.json包含"repositories": {"packagist.org": false}或类似字段 - 解法一(推荐):加
--repository-url=https://packagist.org强制指定,例如composer create-project laravel/laravel demo --repository-url=https://packagist.org - 解法二:创建后立刻进项目目录,执行
composer config --unset repositories,再composer update
"packagist": false,而 composer diagnose 又刚好没报错——这种静默失效,最耗时间。









