Composer 7+ 进度条静止是设计行为,非卡死:因启用异步下载与后台解压,不实时输出进度;验证需用composer install -vvv | grep -E "(Downloading|Extracting|Writing)",60秒无新日志才需干预。

Composer 7+ 进度条不动是设计行为,不是卡死
Mac 或 Linux 上 composer install 显示 0% 或进度条长期静止,大概率不是网络问题,而是 Composer 7.0+ 默认启用异步下载 + 后台解压机制,不输出实时进度。它正在后台校验 SHA256、解压 ZIP、写入 vendor/,只是没告诉你——尤其遇到大包(如 laravel/framework)或 SSD 写入慢时更明显。
验证是否真卡住:
- 运行 composer install -vvv 2>&1 | grep -E "(Downloading|Extracting|Writing)"
- 如果有持续日志输出,说明在干活;如果 60 秒完全无新行,才需干预
- 临时禁用并行:设环境变量
COMPOSER_DISABLE_PARALLEL=1,进度变慢但可感知 - 跳过 ZIP 解压瓶颈:在
composer.json中加"preferred-install": {"*": "source"},改走 Git 克隆(前提是包提供 source) - 避免 autoload 扫描拖慢:CI 或骨架生成时用
--no-autoloader或--no-scripts
镜像配置写错三处,进度条就永远“假死”
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 这条命令必须同时满足三个条件,漏一即失效:
-
repo.packagist是单数,拼成repos.packagist或repositories.packagist都写进无效字段,composer config -g查不到 - 末尾必须带
/:正确是https://mirrors.aliyun.com/composer/,少斜杠会拼成/composerpackages.json直接 404 - 命令末尾必须显式写
composer类型标识:漏掉就会 fallback 到官方源,且无报错提示
验证是否生效:
- composer config -g repo.packagist 输出必须是 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
- composer install -vvv 日志第一行必须含 Downloading https://mirrors.aliyun.com/composer/
缓存和 lock 文件不清理,换镜像也白搭
即使镜像配对了,composer.lock 和本地缓存仍会强制回退到原始源地址,导致下载阶段看似“卡在 99%”,实则是解压前试图从 packagist.org 拉元数据校验 hash,而该请求被阻塞。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须执行
composer clear-cache—— 否则缓存里仍是旧的packages.json和 dist URL - 必须删掉项目根目录的
composer.lock和vendor/——lock文件里每个包的dist.url是硬编码绝对路径,不会随镜像配置自动更新 - 若用过
composer global require,还要进~/.composer单独配一次:composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g)
PHP 版本错位和 platform 欺骗容易被忽略
Homebrew 装了 php@8.2,但 composer install 报 PHP version (7.4.33) does not satisfy that requirement,说明 Composer 正在用 $PATH 里第一个 php 命令做校验。而 which composer 往往指向 shell 封装脚本,开头是 #!/usr/bin/env php,最终仍走系统默认 PHP。
- 确认实际版本:
php -v和$(which php) -v都要查,别信 alias - 临时指定 PHP 路径运行:
php@8.2 -d memory_limit=-1 /opt/homebrew/bin/composer.phar install(-d参数必须紧贴 PHP 路径后、composer.phar前) -
config.platform.php是编译期欺骗,只影响依赖解析,不改变运行时能力:你在 PHP 7.4 上设"platform": {"php": "8.2.0"},Composer 会选兼容包,但生成的vendor/autoload.php若含match或readonly,PHP 7.4 运行时照样报syntax error
最易被忽略的是:进度条不动时,人本能盯着网络,但真正卡点常在本地——PHP 版本错位、缓存残留、lock 文件硬编码、镜像配置拼写错误,四者占全部“假死”案例的 90% 以上。

















