答案是镜像未生效:需严格满足键名repo.packagist、type值composer、url末尾带/三条件,清缓存并删vendor与lock文件后重装。

composer install 卡在 “Loading composer repositories” 或反复重试 packages.json 下载,90% 不是网络慢,而是镜像根本没生效——配错字段、漏清缓存、URL 少斜杠,三者任一出问题,命令就静默失败。
为什么 composer install 卡在更新列表?
这一步本质是拉取全量元数据(packages.json),不是下载包。默认走 https://packagist.org,在国内常因 DNS 解析慢、TLS 握手抖动、路由丢包直接超时或返回空响应。镜像源必须同时提供元数据接口和 dist 包分发节点,且 URL 路径要严格匹配。
composer config -g repo.packagist 怎么写才真正生效?
这条命令极易“看似执行成功,实则完全无效”,必须同时满足三项硬性条件:
- 键名必须是
repo.packagist(单数,不是repos.packagist或repositories.packagist) - 中间必须显式写
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,说明配置失败。
项目里有 repositories 字段,全局镜像就失效
只要 composer.json 中存在 "repositories" 字段(哪怕只是空数组 [] 或空对象 {}),Composer 就会跳过全局 repo.packagist 配置,强制使用项目级定义。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 检查是否存在:
grep -n '"repositories"' composer.json - 临时绕过:
composer install --repository=https://mirrors.aliyun.com/composer/ - 彻底清理(谨慎):
sed -i '/"repositories":/,/],/d' composer.json,注意保留缩进
项目级换源更可靠:进项目根目录,去掉 -g 参数执行 composer config repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/,它会自动合并进 composer.json 的 repositories 数组,不覆盖已有私有源。
换源后还是卡?清缓存 + 删 lock + 看日志
镜像只加速元数据拉取和 ZIP 下载,不解决依赖解析阶段的问题。卡在 Resolving dependencies 是 PHP 内存不足或 xdebug 开启导致的,和镜像无关。
- 先清缓存:
composer clear-cache(注意:CI 环境可能挂载了自定义COMPOSER_CACHE_DIR,需确认路径) - 删掉
vendor/和composer.lock(composer.lock里记录的是原始 dist URL,换源后首次必须重建) - 用
-vvv观察真实请求:composer install -vvv,盯住第一行日志——必须出现GET https://mirrors.aliyun.com/composer/packages.json - 手动验证镜像连通性:
curl -I https://mirrors.aliyun.com/composer/packages.json,返回200 OK才算通
最易被忽略的一点:宝塔、Docker、GitHub Actions 中执行用户 ≠ 你本地终端用户。root 配的全局镜像,www-data 或 runner 用户读不到,得用 sudo -u www composer config -g ... 单独配。










