composer update卡住90%非网络问题,而是镜像未生效、旧缓存干扰或本地依赖求解耗时;需正确配置镜像、清除缓存、收紧版本约束三步解决。

Composer update 卡住,90% 不是网络慢,而是镜像没生效 + 旧缓存还在用 packagist.org 校验,或者根本卡在本地依赖求解阶段——换源、清缓存、收紧约束这三步做对,80% 的“无声卡顿”当场解决。
镜像配置命令写错就等于没配
Composer 2.x 对镜像配置极其严格,漏一个字符就静默 fallback 到官方源,且不报错。必须同时满足:
-
repo.packagist是唯一合法键名(注意是 单数,repos.packagist或packagist.org都无效) - 中间的
composer是 type 值,不是注释,不能省略 -
url必须是 HTTPS 且末尾带/,例如https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(少斜杠会拼成/composerpackages.json返回 404)
正确命令: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、或只返回 URL 字符串,说明没写进去。
卡在 Resolving dependencies?换镜像没用
这个阶段纯本地计算,不走网络,镜像完全不参与。常见诱因:
-
"php": ">=7.4"或"minimum-stability": "dev"这类宽松约束,让 SAT 求解器穷举组合,CPU 占满但无日志 - 残留废弃插件
fxp/composer-asset-plugin,它会强行触发 Node.js 拉 Bower 包,而国内访问bower.io几乎必超时 -
require-dev里塞了太多未锁定版本的工具链,比如"phpunit/phpunit": "^10.0"+"friendsofphp/php-cs-fixer": "dev-main"
解决方向:
卸载插件:composer global remove fxp/composer-asset-plugin
精准更新:composer update yiisoft/yii2(而不是全量 update)
收紧约束:把 "php": "^8.0 || ^8.1 || ^8.2" 改为 "php": "^8.2"
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
换了镜像还是拉不到新包?元数据缓存没刷新
Composer 默认复用本地 packages.json 元数据(15 分钟内不过期),哪怕阿里云镜像站已同步了 monolog/monolog v3.6.0,你本地仍按旧列表算。
- Composer ≥ 2.5:直接用
composer update --refresh,它只丢弃packages.json和provider-*.json,不碰 ZIP 缓存,也不重装包 - Composer ≤ 2.4:手动删缓存子目录,先查路径:
composer config --global cache-dir,再删对应镜像缓存:rm -rf $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer - 执行后立刻跑
composer update monolog/monolog,新版本就能被识别
全局配置在 CI/宝塔/Docker 里大概率失效
全局配置默认写进 ~/.composer/config.json,但宝塔后台以 www 用户运行,GitHub Actions runner 用 runner 用户,Docker 容器甚至没有该路径——你配的镜像它根本读不到。
更稳的做法是项目级配置:
进项目根目录,运行:composer config repo.packagist composer https://mirrors.aliyun.com/composer/(注意不加 -g)
这条命令会自动向 composer.json 的 repositories 字段安全追加 "packagist" 条目,Git 可追踪,CI 可复现。
改完务必运行:composer update --lock,确保 composer.lock 记录的是镜像源地址,而非 packagist.org。
最常被忽略的一点:卡在 Resolving dependencies 时,composer update -v 或 composer update --profile 看到的仍是“Loading repositories”,其实那只是日志滞后;真正耗时的求解过程根本不输出进度,只能靠 CPU 占用和时间判断——这时候换源、清缓存、关 Xdebug 才是白忙一场。










