composer update卡住通常由网络、依赖冲突、脚本阻塞等原因引起。1. 可尝试切换国内镜像源并清除代理解决网络问题;2. 复杂依赖可加–prefer-dist或简化依赖树;3. git克隆卡住时检查ssh配置或强制使用压缩包;4. 清除缓存、检查磁盘空间应对IO慢;5. 使用–no-scripts排除脚本阻塞;6. 通过composer update -vvv查看详细日志定位具体卡点,逐步排查即可解决。

Composer update 卡住不动,通常不是单一原因导致的,而是由网络、配置、依赖冲突或脚本阻塞等多种因素引起。下面列出常见原因及对应的解决方法。
1. 网络连接问题
Composer 需要从远程仓库(如 packagist.org)下载元数据和包文件,如果网络不稳定或被墙,就容易卡在某个步骤。
- 尝试使用国内镜像源,例如阿里云或 laravel China 的 Composer 镜像:
- 检查是否开启了代理,如有必要清除代理设置:
composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/
composer config -g –unset http-proxy
2. 依赖解析复杂或冲突
当项目依赖较多,或版本约束太严格时,Composer 的依赖解析器可能需要很长时间计算兼容版本,看起来像“卡住”。
- 查看当前终端是否有输出进度,比如 Resolving dependencies,这阶段可能耗时较长,但仍在运行。
- 尝试加上 –prefer-dist 或 –prefer-source 减少分析时间。
- 临时移除某些非必要依赖,简化依赖树。
3. Git 或版本控制操作阻塞
如果某个包是通过 source(Git 克隆)方式安装的,Composer 会执行 git clone,若仓库大或 SSH 认证失败,就会卡住。
- 确认 SSH 密钥是否配置正确,能否正常访问私有仓库。
- 使用 –prefer-dist 强制使用压缩包而非克隆:
- 检查是否有大量 dev 分支或未打标签的版本,增加了解析难度。
composer update –prefer-dist
4. 缓存问题或磁盘 IO 慢
缓存损坏或磁盘读写慢也会导致响应迟钝。
- 清除 Composer 缓存试试:
- 检查磁盘空间是否充足,尤其是 tmp 目录。
composer clear-cache
5. 脚本钩子阻塞(post-update-cmd 等)
composer.json 中定义的脚本(如 dump-autoload、clear-cache)可能在更新后执行,如果脚本本身卡住,会误以为是 update 卡了。
- 用 –no-scripts 参数跳过脚本测试:
- 检查 post-update-cmd 中的命令是否调用了阻塞操作。
composer update –no-scripts
6. 开启详细日志定位问题
使用更详细的输出来判断卡在哪一步:
composer update -vvv
观察最后输出的那行信息,就能知道是卡在“下载”、“解析”还是“执行脚本”。
基本上就这些。先看日志,再查网络和依赖,多数情况都能解决。


