Composer卡在“Updating dependencies”本质是依赖解析、元数据下载或包下载环节阻塞,需用-vvv --profile定位具体卡点,再针对性处理镜像、缓存、版本约束或超时设置。

为什么 composer install 或 composer update 会卡在 “Updating dependencies” 阶段
本质是 Composer 在解析依赖图、比对版本约束、下载包元数据(packages.json)或实际下载 ZIP 包时阻塞,常见于网络策略、镜像失效、本地缓存损坏或 PHP 进程被限流。不是“没反应”,而是卡在某个具体环节 —— 必须先定位到哪一步停住。
用 -vvv 和 --profile 看清卡点在哪
盲目换镜像或删缓存之前,先让 Composer 吐出详细日志和耗时分布:
composer update -vvv --profile
重点关注三类输出:
- 最后一条
Reading .../packages.json from cache或Downloading https://.../packages.json—— 卡在元数据拉取,说明镜像或 DNS 有问题 - 长时间停在
Resolving dependencies through SAT—— 依赖冲突严重,SAT(布尔可满足性)求解器在暴力回溯,需简化composer.json中的版本约束 - 卡在
Downloading http://.../vendor/package.zip—— 实际下载慢或中断,和源站响应、TLS 握手、代理设置强相关
国内用户优先检查镜像配置是否生效且可用
阿里云、腾讯云等 Composer 镜像近年频繁调整路径或关停服务,composer config -g repo.packagist 显示的 URL 可能已 404。验证方式:
curl -I https://mirrors.aliyun.com/composer/packages.json
若返回 404 或超时,立即切换:
- 临时使用:运行
composer config -g repo.packagist composer https://packagist.org回退官方源(仅调试) - 切阿里云稳定版(非 mirrors 子域):
composer config -g repo.packagist composer https://php.cnpkg.org -
清华源已弃用 HTTP,请用 HTTPS:
composer config -g repo.packagist composer https://packagist.phpcomposer.com(注意:该域名实际由清华维护,但需确认当前是否仍有效)
切完务必运行 composer clear-cache,否则旧缓存仍会尝试访问失效地址。
绕过 SAT 求解器卡死:用 --with-all-dependencies 或降级约束
当项目含大量私有包、dev 分支或模糊版本号(如 "^1.0 || ^2.0"),SAT 求解可能耗时数分钟甚至失败。此时:
- 加
--with-all-dependencies让 Composer 跳过部分兼容性校验,快速生成 lock 文件(适合 CI 场景) - 把宽泛约束改具体,例如将
"monolog/monolog": "^2.0"改为"monolog/monolog": "2.10.0",大幅减少搜索空间 - 禁用插件干扰:
composer update --no-plugins,某些自定义插件会在依赖解析阶段注入逻辑
真正棘手的卡顿往往藏在 require-dev 里 —— 尝试先注释掉开发依赖,再 composer install,确认主依赖无问题后再逐步恢复。
最易被忽略的是 PHP 的 max_execution_time 和 Composer 的 process-timeout 设置。即使网络通畅,超时参数过小也会让进程被强制终止,表现为“卡住几秒后报错”。查当前值:composer config process-timeout,生产环境建议设为 3600(1小时)。










