Composer安装卡顿90%非网络问题,而是镜像未生效、缓存未清、并发未开、Xdebug开着或lock文件缺失;需执行composer config -g repo.packagist验证输出为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},并配合clear-cache、--prefer-dist、关闭xdebug及提交composer.lock。

Composer安装卡顿,90%不是网络差,而是配置没对齐——镜像未生效、缓存未清、并发未开、Xdebug开着、lock文件缺失,这五点任一踩中就会卡在Resolving dependencies或Downloading阶段。
怎么确认镜像源是否真正生效
别只看composer.json里有没有写repositories,全局配置才是CI/CD和容器内安装的命脉。执行composer config -g repo.packagist,输出必须是完整JSON且含"url": "https://mirrors.aliyun.com/composer/"。如果返回null、空对象或仍是packagist.org,说明没生效。
- 旧版Composer(1.x)不识别
repo.packagist,得用composer config -g repos.packagist '{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}' - 项目级
composer.json里定义了repositories会覆盖全局,要么删掉,要么确保其URL也指向国内镜像 - 验证连通性:
curl -I https://mirrors.aliyun.com/composer/packages.json,秒回200才算靠谱
为什么加了--prefer-dist还是卡在Downloading
--prefer-dist不是万能开关,它依赖镜像源实际提供dist包。阿里云、腾讯云等主流镜像几乎不缓存source,一旦镜像没切成功,Composer就会fallback到git clone,触发git init、git checkout、子模块同步——这些操作在老旧服务器或Docker容器里极易因SSH key缺失、Git配置为空或DNS失败而中断。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须同步执行:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/+composer clear-cache - 检查项目
composer.json是否含"prefer-source": true,有就手动删掉,它会强制覆盖全局prefer-dist - 私有包只提供source地址时,
--prefer-dist直接报错:Could not find a matching version of package xxx
parallel-downloads设多少才不翻车
并发不是越高越好。parallel-downloads是Composer 2.2+才支持的参数,默认值是3,基本等于没开;设成20容易触发file_put_contents(/tmp/): failed to open stream——这是临时文件竞争,不是磁盘满。
- 先确认版本:
composer --version,低于2.2必须先composer self-update --prefer-dist - 安全上限是6–8:老旧服务器或Docker容器内存紧张时,设10反而更慢
- CI脚本中推荐显式指定:
composer install --concurrency=6 --no-interaction --no-progress,值取CPU核心数×1.5,但不超过12 - 注意:
parallel-downloads只对install有效,update不走这套逻辑
Resolving dependencies卡住的真实原因
这阶段完全不碰网络,纯CPU密集型任务。卡住意味着Composer在本地穷举版本组合,常见于composer.lock缺失、minimum-stability设为dev、Xdebug开着、或OPcache被禁用。
- 运行
php -v查Xdebug,有就临时禁用:php -d xdebug.mode=off $(which composer) install -
composer.lock必须提交到Git,否则每次都要重新解析整个依赖图 - 删掉
composer.json里的"minimum-stability": "dev",稳定版候选集小得多 - Docker或自定义PHP镜像常关掉CLI模式下的OPcache,加
php -d opcache.enable_cli=1 composer install试试
最易被忽略的是缓存路径本身——~/.composer/cache若落在NFS卷、Docker volume或慢速磁盘上,下载再快也白搭。CI中必须同时缓存~/.composer/cache和vendor/,且用composer.lock的SHA256作cache key,否则PHP小版本升级就全失效。

















