composer install卡在downloading或loading的根源是镜像未生效,常见错误包括repo.packagist拼写错误、漏写type值“composer”、url缺少末尾斜杠/,导致静默回退至官方源;验证需用composer install -vvv确认首行日志是否含镜像地址;正确命令为composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,且必须清缓存、删vendor与lock文件后重装。

composer install卡在Downloading或Loading,90%不是网络差
根本原因是镜像没生效——repo.packagist写错、composer type漏掉、URL少斜杠/,三者任一出错,Composer就静默回退到https://packagist.org,不报错也不提示。你看到的“超时”,其实是反复连官方源失败。
验证是否真走镜像:运行composer install -vvv,盯住第一行日志,必须出现类似Downloading https://mirrors.aliyun.com/composer/packages.json;如果还是packagist.org,说明配置白写了。
-
repo.packagist必须是单数(不是repos.packagist) - 命令第三个参数必须是
composer(表示type),不能省略 - URL必须以
https://开头且末尾带/:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌ - 全局配置必须加
-g,否则只改当前项目composer.json
换源命令必须严格按格式执行
正确命令只有一条,缺一不可:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
执行后立刻验证:composer config -g repo.packagist输出必须是完整 JSON,例如:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。如果输出为空、null、或仍是https://packagist.org,说明根本没写进去。
常见错误写法:
-
composer config -g repos.packagist composer ...(多一个s) -
composer config -g repo.packagist https://...(漏掉中间composer) -
composer config repo.packagist composer ...(没加-g,只改本地项目)
清缓存、删lock、重装vendor才是关键
镜像只加速新请求,但旧缓存里全是packagist.org的元数据。不清理,Composer会优先读缓存并尝试校验旧地址,结果就是卡在DNS或TLS握手——根本没发请求到镜像站。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先清缓存:
composer clear-cache - 删掉整个
vendor/目录:rm -rf vendor(Linux/macOS)或rmdir /s vendor(Windows) - 删掉
composer.lock:rm -f composer.lock - 最后跑:
composer install --no-cache --prefer-dist
别试图保留composer.lock——它硬编码了旧源的包哈希,和镜像返回的元数据不兼容,必然触发hash does not match错误。
项目级配置比全局更可靠,尤其在CI/宝塔/Docker中
全局配置写在~/.composer/config.json,但在CI runner、宝塔www用户、Docker容器里常因权限或路径问题读不到。项目级配置直接写进composer.json,随代码提交,行为一致。
进项目根目录执行:
composer config repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/
注意:不加-g。它会自动向composer.json的repositories对象中追加"packagist"条目,不覆盖已有私有源。
但如果composer.json里已有"repositories": [](空数组),命令会报错。此时先手动改成"repositories": {}再执行,或用composer config --unset repositories临时清掉。
复杂点在于:只要composer.json里存在"repositories"字段(哪怕只是{}),全局配置就完全失效——不是优先级低,是彻底跳过。










