默认不显示进度不是 bug,是 composer 主动降级日志级别;加 -v 即可看到真实下载行为,包括卡点位置和原因,-vv 和 -vvv 逐层暴露 http 请求、缓存状态及 curl 调试信息。

默认不显示进度不是 bug,是 Composer 主动降级日志级别——加 -v 就能立刻看到真实下载行为,包括卡在哪、为什么卡。
为什么 composer install 看不到 “Downloading” 进度条?
它根本没被禁用,而是被“静默吞掉”了。Composer 会根据终端是否为 TTY、COMPOSER_NO_INTERACTION 环境变量、是否在 CI 环境中自动切换到低日志模式,连 HTTP 超时、SSL 验证失败、包解析异常这些关键错误都一并过滤掉。
- 现象:命令停在
Loading composer repositories或Installing dependencies几分钟不动,终端既无报错也无进度 - 本质:不是网络慢,是你看不到它正在请求哪个 URL、是否重定向、有没有缓存命中
- 验证方式:加
-v后如果立刻出现Reading /path/to/composer.json和Downloading https://mirrors.aliyun.com/composer/...,说明之前全被压住了
-v、-vv、-vvv 到底输出什么?
它们不是“多一点少一点”的模糊等级,而是逐层暴露底层动作的调试开关:
-
-v:显示包名、基础进度、镜像源 URL、锁文件变更摘要(够定位 80% 卡点) -
-vv:额外打印 HTTP 请求头、重定向链(如302 → https://cdn.example.com/xxx.zip)、缓存状态(Cache hitorCache miss) -
-vvv:含完整 cURL 调试信息(SSL 握手过程、响应体截断提示、json_decode() expects parameter 1 to be string, bool given这类真实 PHP 错误)
注意:-v 系列必须紧贴子命令后,比如 composer install -vvv ✅,而 composer install --with-dependencies -vvv ❌(-vvv 会被忽略)。
CI/CD 里加了 -vvv 还是没日志?检查这三点
GitHub Actions、GitLab CI 等环境常因输出缓冲或权限问题让日志“延迟刷出”甚至“完全消失”:
-
COMPOSER_NO_INTERACTION=1不影响-vvv输出,但某些容器 PHP 编译未启用cliSAPI 的 flush 支持,需加php -d output_buffering=0 - 更稳妥做法是强制行缓冲:
stdbuf -oL -eL composer install -vvv 2>&1 - 别忘了
--no-ansi:CI 日志里 ANSI 控制符(如\x1b[32m)会变成乱码或方块,--no-ansi是唯一稳定解法
真正容易被忽略的:进度“快得看不见”,不等于没下载
国内镜像 + --prefer-dist + 本地缓存会让下载变成毫秒级提取,Downloading 行一闪而过甚至不出现——这时你看到的“没进度”,其实是它已经完成了。唯一能确认它干了什么的,只有 -vvv 输出里的 Cache hit、Extracting 和 Generating autoload files 这几行。别盯着“Downloading”找存在感,看它到底从哪来、用了什么路径、有没有跳过才是关键。











