答案是三要素缺一不可:键名必须为repo.packagist(单数)、type值必须显式写composer、URL须HTTPS且以/结尾;任一不符即静默回退官方源,验证需输出完整JSON对象{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}。

改完镜像源还慢,大概率不是镜像本身的问题,而是配置没生效、缓存没清、或根本卡在不走网络的环节——得一层层剥开看。
确认 repo.packagist 配置是否真正写进去了
Composer 对键名、type、URL 格式极其敏感,错一个字符就静默回退到 packagist.org,还不报错。
-
repo.packagist必须是单数,写成repos.packagist或repositories全部被忽略 - 命令里必须显式带上
composer这个type值:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - URL 必须以
/结尾,https://mirrors.aliyun.com/composer❌ 会拼出/composerpackages.json导致 404 - 验证方式只有一种:
composer config -g repo.packagist输出必须是完整 JSON,比如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};空、null、或仍是packagist.org,说明压根没写进去
检查缓存是否还在用旧元数据
Composer 默认优先读本地缓存,哪怕你刚配好镜像,只要 ~/.composer/cache/repo/ 里还存着从官方源拉下来的 packages.json,它就会继续往那儿发请求,直到超时才 fallback。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须执行
composer clear-cache,这不是可选项 - 清完后检查缓存目录是否真空:
ls ~/.composer/cache/repo/应该返回空 - 临时验证:加
--no-cache跑一次composer install -vvv,如果变快,就坐实是缓存问题 - 日志末尾出现
Reading packages.json from cache at /https---mirrors-aliyun-com-composer/才算真正走新源
看日志里实际请求的是哪个域名
别信“命令跑完了”,要亲眼看到请求发到了镜像站。有些包(比如 GitHub 直链)根本不走镜像,得靠日志揪出来。
- 运行:
composer show laravel/framework -vvv 2>&1 | grep "Downloading" - 日志里必须出现
mirrors.aliyun.com或mirrors.tuna.tsinghua.edu.cn这类域名 - 如果还看到
codeload.github.com或packagist.org,说明部分包绕过了镜像——常见于composer.lock里残留的原始 dist URL - 此时必须删掉
vendor/和composer.lock,再跑composer install --no-cache
卡在 Resolving dependencies 就别折腾镜像了
这个阶段完全不走网络,纯本地 CPU+内存穷举满足所有约束的版本组合。镜像再快也救不了。
- 典型诱因:
"php": ">=7.4"、"minimum-stability": "dev"、"monolog/monolog": "*"这类宽泛约束会让求解器爆炸式增长候选版本 -
xdebug开着会让整个过程慢 5–10 倍:临时禁用试试php -d xdebug.mode=off $(which composer) install - 内存不足也很常见:默认 128M 不够,加
COMPOSER_MEMORY_LIMIT=-1再试 - 删掉
vendor/和composer.lock后重装,尤其当 lock 文件里有已下线包时
最常被忽略的点:项目级 composer.json 里的 repositories 字段会直接覆盖全局配置,哪怕你 -g 配得再对也没用;CI、宝塔这类非交互环境又常以 www 用户运行,但你 config -g 写的是 root 配置——权限和作用域不匹配,等于白配。

















