配置未写入成功,因键名repo.packagist、type值composer、https末尾斜杠三者缺一即静默失效;验证须输出完整json如{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}。

composer config -g repo.packagist 输出为空或不是完整 JSON
这说明配置根本没写进去,不是“生效慢”,是压根没命中 Composer 的识别规则。Composer 2.0+ 对键名、type 值、URL 格式三者有硬性校验,缺一即静默忽略。
必须同时满足:
-
repo.packagist是唯一合法键名(单数、全小写、不能是repos.packagist或packagist.org) - 第二个参数必须显式为
composer(这是type值,不是可选注释) - URL 必须以
https://开头,且末尾带斜杠,例如https://mirrors.aliyun.com/composer/ - 命令必须加
-g,否则只改当前项目,不作用于全局
验证方式只有一种:composer config -g repo.packagist 输出必须是类似 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} 的完整 JSON 对象。空、null、字符串 URL、或报 Key not found,都说明失败。
明明配了镜像,-vvv 日志里还在请求 packagist.org
这不是网络问题,是配置被更高优先级的设置覆盖了。Composer 的源加载顺序是:项目级 composer.json 中的 repositories 字段 > 全局配置 > 默认源。只要项目里有 "repositories",全局镜像就彻底失效,且不提示。
快速排查:
- 进项目目录,运行
composer config repositories,看packagist.org对应的url是什么 - 用
grep -A5 '"repositories"' composer.json检查是否存在该字段(包括空数组[]、空对象{}、甚至"packagist.org": false) - 临时清除:执行
composer config --unset repositories(注意无-g),再跑composer install -vvv
特别注意:Laravel 等脚手架生成的模板常自带空 "repositories": {},它会直接屏蔽全局配置。
curl 测试镜像地址返回 404 或超时
Composer 不报错,但你实际发不出请求——这一步卡在 DNS 或 URL 拼写上,和 PHP 配置完全无关。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
先确认基础连通性:
- 运行
ping mirrors.aliyun.com,若返回unknown host,说明 DNS 解析失败 - 运行
curl -I https://mirrors.aliyun.com/composer/packages.json,返回HTTP/2 404多半是 URL 少了末尾/;返回Could not resolve host就是纯 DNS 问题 - 绕过 DNS 测试:
curl --resolve mirrors.aliyun.com:443:223.5.5.5 https://mirrors.aliyun.com/composer/packages.json -I,能返回200就证实是 DNS 污染
常见拼写错误:
- 清华源必须是
https://mirrors.tuna.tsinghua.edu.cn/composer/,漏掉/composer/或多写/composer都会 404 - 已下线源如
https://packagist.phpcomposer.com会返回 HTML 页面,curl -I显示非200 OK就别再用
配置正确、DNS 正常,但 composer install 卡在 Resolving dependencies
镜像只加速下载(Downloading 阶段),对依赖解析(Resolving dependencies)毫无影响。这个阶段卡住,99% 和镜像无关。
典型诱因:
-
"php": "^7.4 || ^8.0"这类宽泛约束,让 Composer 尝试海量版本组合 -
require-dev里塞了未锁定版本的工具链,比如"phpunit/phpunit": "^9" - 项目中存在大量
dev-分支依赖,或composer.lock未提交、未固定 - 缓存污染:旧
packages.json元数据仍指向packagist.org,导致后续请求 404 或校验失败
必做动作:
- 执行
composer clear-cache,并手动删掉~/.composer/cache/repo/https---packagist.org/ - 删掉
vendor/和composer.lock,再composer install - 收紧版本约束,把
^9改成^9.6,把dev-main改成具体 tag
最易被忽略的是:改完镜像后不清缓存,等于给一个错误的元数据源加速——所有后续行为都会偏离预期。










