答案是先验证 repo.packagist 配置是否生效且格式正确,输出必须为完整 json(如{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}),否则静默回退至官方源;再删除 vendor/ 和 composer.lock 强制刷新硬编码的 provider 路径,并用 curl -i 实测镜像 provider 文件是否真实可访问。

404 错误不是网络断了,而是 Composer 死磕了一个根本不存在的地址——它可能来自锁文件、缓存、错配的镜像源,或压根没生效的离线配置。
确认 repo.packagist 配置是否真正写入且格式正确
Composer 2.2+ 只认 repo.packagist 这个精确键名,拼错、漏 -g、少 composer 类型参数,都会静默 fallback 到官方源,你却以为“已经配好了”。
- 运行
composer config -g repo.packagist,输出必须是完整 JSON,例如:{"type":"composer","url":"https://mirrors.aliyun.com/composer/"} - 如果输出
null、空行、https://packagist.org或报错,说明配置根本没生效 - 常见错误:URL 少了末尾
/(变成.../composer→ 请求/composerpackages.json直接 404);用 root 配置但实际以 www-data 执行;键名写成repos.packagist或repositories.packagist
删 composer.lock 和 vendor/ 比清缓存更关键
composer.lock 不只是记录版本,它硬编码了每个包的 provider 下载路径,比如 https://packagist.org/p2/monolog/monolog.json。换源后 Composer 仍会优先请求这个旧地址,而不是新镜像的路径。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
composer clear-cache只清下载缓存,不碰 lock 文件里的元数据 - 必须手动删除
vendor/和composer.lock(不能只删 vendor) - 再执行
composer install—— 不要用update,它会复用 lock 里已失效的 provider 地址 - CI 环境尤其要注意:每次构建都是干净容器,
composer.lock若被提交进 Git,等于把旧 provider 地址固化进了流水线
验证镜像源是否真实可用,别信文档或首页
测首页 /packages.json 只能说明服务在线,真正要命的是 provider 文件路径是否可访问。国内镜像同步延迟、被拦截、DNS 解析错位,都可能导致 404。
- 运行
curl -I https://mirrors.aliyun.com/composer/p/provider-2025-10%24.json(年份替换成当前年份) - 必须返回
HTTP/2 200;返回404、301、超时或 HTML 页面,说明镜像不可用 - 腾讯云镜像已于 2024 年 10 月 1 日下线,
https://mirrors.cloud.tencent.com/composer/已永久 404 - 临时切回官方源验证:
composer config -g repo.packagist composer https://repo.packagist.org,再跑一次composer install;如果不报 404 了,问题 100% 出在镜像上
私有包 404 别急着换源,先查 repositories 是否被忽略
私有包不会出现在 Packagist,Composer 默认根本不往你公司 GitLab 或本地路径里找。配置错一个字段,它就静默跳过整个 repositories 区块,继续查默认源,结果当然还是 404。
-
type必须是vcs(不是git、github),URL 必须是可git clone的地址,结尾只能是.git,不能带#main或路径 - 项目级
composer.json中的repositories会覆盖全局配置;用grep -A5 '"repositories"' composer.json检查是否残留旧镜像地址 - 若启用私有源,必须显式禁用官方源:
{"packagist.org": false}要作为独立对象放在repositories数组末尾,不能嵌套、不能写成"packagist": false - GitHub 私有仓库需
auth.json配 token,URL 里不能含@username,否则认证被跳过
最常被忽略的点:锁文件里的 provider 地址是硬编码的,换源 ≠ 自动更新路径;而 composer search 只查 Packagist 全局索引,和你配的离线源完全无关——它搜得到,不代表你能装。










