composer 404 根因是镜像源失效或 composer.lock 硬编码旧 url:先用 composer config -g repo.packagist 查配置,再 curl -i 测连通性;删 vendor/ 和 composer.lock 后重装,并检查 ssl 证书是否过期。

composer config -g repo.packagist 输出的是旧镜像地址
看到 404 Not Found 第一反应不该是重装 Composer,而是查当前生效的镜像源。运行 composer config -g repo.packagist,如果输出里含 "https://packagist.phpcomposer.com" 或 "https://packagist.laravel-china.org",立刻停用——这两个地址自 2022 年起就固定返回 404,不是临时故障,是永久下线。
国内目前稳定可用的镜像地址(注意末尾必须带 /):
- 阿里云:
https://mirrors.aliyun.com/composer/ - 清华(代理模式,新包同步快):
https://packagist.proxy.fly.dev - 腾讯云:
https://mirrors.cloud.tencent.com/composer/
设置命令示例:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/。设完务必再跑一次 composer config -g repo.packagist 确认输出已更新,不是 null 或旧值。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
curl -I 测不通,说明镜像本身不可用
配置写对了不等于能用。很多 404 实际是镜像服务挂了、被本地网络拦截(比如公司代理/DNS 污染),或地址少了个斜杠。手动验证最可靠:
- 运行
curl -I https://mirrors.aliyun.com/composer/packages.json - 必须秒回
HTTP/2 200才算活;返回404、timeout或卡住,说明镜像不可达 - 特别注意:地址漏掉末尾
/(如写成https://mirrors.aliyun.com/composer)会导致所有p2/路径请求 404,因为 Composer 会拼出https://mirrors.aliyun.com/composer/p2/xxx.json这种无效 URL
删 vendor 和 composer.lock 是硬性动作
composer clear-cache 只清 provider 列表缓存,不影响 composer.lock 里硬编码的下载路径。而 lock 文件一旦记了失效 URL(比如 "https://packagist.org/p2/monolog/monolog.json"),换镜像后 Composer 仍优先试这个旧地址,必然 404。
- 必须删掉整个
vendor/目录和composer.lock文件 - 再执行
composer install—— 不要用composer update,它会复用 lock 里可能已坏的元数据 - CI 环境(GitHub Actions/GitLab CI)默认不继承本地配置,需在 workflow 里显式执行镜像设置命令
私有包 404 往往和镜像 fallback 机制冲突
如果你 require 的是公司内部 Git 包或 Satis 私有源,但 composer.json 里没配对 repositories,Composer 就会跳过你的源,直接去镜像里找——而镜像根本没有你的私有包,自然 404。
- 私有 Git 包必须声明
"type": "git"(不是vcs),且url是可 clone 的 HTTPS 地址,例如"https://gitlab.example.com/mygroup/mylib.git" - 私有 Composer 源(如 Satis)必须写
"type": "composer",并确保该服务本身可访问、且已包含目标包 - 所有自定义
repositories必须放在镜像源前面,否则顺序错位导致 fallback 失效 - Git 分支或 tag 名必须真实存在,
"dev-main"要求远程有main分支,"1.2.3"要求有对应 tag
composer.lock 里锁死的旧路径、私有源声明缺失、或者镜像 URL 少了那个不起眼的 /。这三处一错,现象全是 404,但根因完全不同。










