直接删全局镜像配置并清缓存,是让 Composer 回归默认源 https://packagist.org;常见失效原因是误删 repo.packagist(单数)而未删 repos.packagist(复数),需用 composer config -g repos.packagist 验证是否为空,并检查环境变量、项目级配置及运行 clear-cache。

直接删掉全局镜像配置并清缓存,不是“恢复默认”,而是让 Composer 回到它本来的行为:没配置就走 https://packagist.org。
为什么 composer config -g --unset repos.packagist 总不生效
最常见原因是字段名写错。Composer 2.x 实际读取的是 repos.packagist(复数、带 s),但很多中文教程教的是 repo.packagist(单数)。这两个字段完全独立——删了 repo.packagist,repos.packagist 还在,镜像照常走。
- 执行
composer config -g repos.packagist,如果输出Key "repos.packagist" does not exist或空,才算删对了 - 漏掉
-g参数?那只是删当前项目的repositories字段,对全局无效 - 删完不运行
composer clear-cache?缓存里还存着阿里云/腾讯云的packages.json快照,composer update会继续拉错包、版本号错乱
查三层配置,才能确认真正生效的源
Composer 查源顺序是:环境变量 > 项目级 composer.json > 全局 config.json。哪怕你全局删干净了,只要项目里有 "repositories" 块,它就优先生效。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 查项目级:运行
composer config repo.packagist(不加-g),看输出是不是镜像地址 - 查环境变量:
echo $COMPOSER_REPO_PACKAGIST(Linux/macOS)或echo %COMPOSER_REPO_PACKAGIST%(Windows),有输出就得先 unset - 查全局:
composer config -g repos.packagist,应为空或报错 - 验证真实请求:
composer require monolog/monolog --no-install -vvv,滚动日志里找Downloading https://行——正确地址必须含repo.packagist.org,不是任何镜像域名
删配置不如直接覆盖为官方地址
更稳妥的做法不是删字段,而是用 composer config 显式设回官方源。这条命令兼容所有 Composer 2.x 版本,绕过各种 fallback 判断逻辑,尤其避免旧小版本(如 2.2–2.4)删配置后卡在 Could not parse version constraint 的问题。
- 全局切回:
composer config -g repo.packagist composer https://packagist.org(注意这里是repo.packagist,单数) - 仅当前项目临时切回:
composer config repo.packagist composer https://packagist.org(不加-g) - 如果项目
composer.json里写了"packagist.org": false,得手动编辑删掉整个repositories块,否则覆盖全局也没用
私有源和认证凭据容易被连带误删
删 repos.packagist 时,别顺手跑 composer config -g --unset repositories——这会把私有 Git 仓库、Satis 源等全干掉。私有源地址定义在项目 composer.json 的 repositories 字段里,而认证凭据(如 GitHub token、GitLab basic auth)存在 ~/.composer/auth.json 中,这个文件权限必须是 600,否则 Composer 直接拒绝读取。
- 备份时记得一起拷贝:
cp ~/.composer/auth.json ~/.composer/config.json ~/backup/ - 恢复后立刻检查权限:
chmod 600 ~/.composer/auth.json - 如果
composer install报Failed to authenticate,八成是auth.json缺失或权限不对
真正麻烦的从来不是命令怎么写,而是你以为删完了,其实环境变量、项目配置、缓存三者里至少还有一个在偷偷生效。验证必须落到网络请求日志里,而不是配置命令的输出。

















