Composer镜像配置必须严格满足四要素:-g(全局)、repo.packagist(字段名)、composer(type值)、https://mirrors.aliyun.com/composer/(末尾斜杠不可少),缺一即静默失效;Windows需重启终端,Linux/macOS用sudo会导致权限隔离;验证须通过composer clear-cache && composer require -vvv观察实际下载URL,或用composer diagnose确认生效源;项目级repositories必须为数组且首项{"packagist.org": false};镜像仅加速packagist.org包,GitHub直连、package类型、ext扩展等不受影响。

composer config -g repo.packagist 命令必须带全四要素
这条命令不是“大概对就行”,漏一个就静默失效,且不报错,你根本不知道配失败了。
-
-g(全局):缺了它,配置只写进当前项目composer.json的repositories字段,对其他项目无效 -
repo.packagist(单数,不能是repos.packagist或repositories.packagist.org):写错字段名,Composer 完全忽略,composer config -g repo.packagist查出来永远为空 -
composer(type 值):必须显式指定,不是可选参数,也不是注释占位符 -
https://mirrors.aliyun.com/composer/(末尾斜杠不能少):少了/,请求路径会拼成/composerpackages.json,返回 404,命令卡住但不提示
Windows 用户执行完要重启终端;Linux/macOS 下若用 sudo composer config -g,配置写进了 /root/.composer/config.json,普通用户运行时读不到——这不是 bug,是权限隔离的正常行为。
验证镜像是否真生效,别信 composer config -g 输出
composer config -g repo.packagist 只告诉你“你写了什么”,不等于 Composer 正在用它。真正生效要看实际网络请求。
- 跑一次真实操作:
composer clear-cache && composer require monolog/monolog -vvv - 在日志里搜索
Downloading,确认出现的是https://mirrors.aliyun.com/composer/packages.json - 如果看到
https://packagist.org/packages.json或https://repo.packagist.org/packages.json,说明被项目级composer.json中的repositories覆盖了
另外,composer diagnose 里的 Repo packagist.org: 行也会显示当前实际使用的 URL,比 config -g 更可靠。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
项目级 repositories 必须是数组且首项禁用官方源
Composer 2.2+ 不再接受对象形式的 "repositories": {"packagist.org": {...}},这种写法会被静默忽略,元数据仍走硬编码的 packagist.org。
- 必须写成数组:
"repositories": [ ... ] - 第一项必须是
{"packagist.org": false},独立对象,不能合并到下一项里 - 镜像 URL 末尾必须带
/,否则请求路径错误,返回 404 - 改完后必须删掉
vendor/和composer.lock,再跑composer install——update不会重新解析源,只会沿用 lock 文件里的旧 dist URL
CI/CD 流水线里尤其要注意:缓存可能保留旧 composer.lock,导致镜像配置形同虚设。脚本里得加 rm -f composer.lock && rm -rf vendor。
镜像提速 ≠ 所有依赖都变快
国内镜像只加速来自 packagist.org 的 PHP 包。以下情况镜像完全不生效:
- 依赖中含
"type": "package"或直接指向 GitHub 的"url": "https://api.github.com/..."—— 这类请求绕过镜像,直连 GitHub -
composer.lock里记录的dist.url是原始 GitHub 地址,即使换了镜像,Composer 仍按 lock 文件下载 - 扩展类包(如
ext-redis)由phpize编译安装,和镜像无关,慢是因为本地编译耗时
遇到“配了镜像还是慢”,先 grep -r "https://api.github.com" composer.lock,如果大量命中,说明关键依赖没走镜像源,得检查 composer.json 是否误用了 package 类型定义或私有仓库配置。

















