Composer 2.2+ 仅识别 repo.packagist.org 键名,配置需为完整 JSON 格式且 URL 必须含末尾斜杠;生效验证须结合 composer config -g repo.packagist.org 输出与 -vvv 日志中真实 GET 请求地址。

查 repo.packagist.org 键值是否写对了
Composer 2.2+ 只认 repo.packagist.org 这个键名(注意带 .org 后缀),repo.packagist、repos.packagist、repositories.packagist 全部无效,写了也静默忽略。运行:
composer config -g repo.packagist.org
输出必须是完整 JSON,例如:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、报错 Could not find repository 'packagist.org'、或返回 "https://packagist.org",说明根本没生效。
常见踩坑点:
- 漏掉
-g→ 查的是当前项目配置,不是全局 - PowerShell 中 URL 被截断 → 必须加引号:
composer config -g "repo.packagist.org" "composer https://mirrors.aliyun.com/composer/" - URL 少了末尾斜杠 →
https://mirrors.aliyun.com/composer会拼出错误路径导致 404,必须写成https://mirrors.aliyun.com/composer/
看 composer -vvv 真实请求地址
配置写了 ≠ 实际发出去了。缓存、环境变量、插件都可能干扰。唯一可信的是日志里真实发出的 HTTP 请求:
composer require monolog/monolog -vvv 2>&1 | grep "GET https"
关注这一行:
-
GET https://mirrors.aliyun.com/composer/packages.json✅ 真在走镜像 -
GET https://repo.packagist.org/packages.json❌ 还在连官方源
执行前务必先 composer clear-cache,否则旧缓存里的元数据会掩盖配置变更。如果输出里有 COMPOSER_REPO_PACKAGIST 环境变量,它优先级最高,会静默覆盖 repo.packagist.org 设置。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
确认没被项目级 repositories 覆盖
只要项目根目录的 composer.json 里存在 "repositories" 字段(哪怕空数组),Composer 就会彻底忽略全局镜像配置,完全按项目定义走。验证方式:
composer config repositories
输出内容就是此刻真实生效的源列表。重点找含 "packagist.org" 的那一项,它的 url 值才是最终决定请求地址的依据。
若需同时用私有源 + 阿里云镜像,必须把阿里云源显式写进 repositories 数组,并在同一数组中设 "packagist.org": false,否则镜像不参与路由。
别信 composer diagnose 和“好像快了”
composer diagnose 完全不检查镜像是否生效。它只验证 PHP 环境、cURL、openssl 是否可用,即使你把键名写成 repos.packagist 或 URL 少斜杠,它仍显示 OK,但后续命令必然卡在 Resolving packages 或 404。
真正暴露问题的只有两个动作:
-
composer config -g repo.packagist.org—— 输出必须是合法 JSON -
composer -vvv require xxx—— 日志里GET https行必须匹配你配的镜像域名
最常被忽略的是:镜像地址对了,但 /p2/ 或 /packages.json 接口返回结构异常(比如缺 "packages" 字段),这时 curl 测首页 200 没用,得测具体接口:curl -fsSL https://mirrors.aliyun.com/composer/packages.json | jq -e 'has("packages")'。

















