composer命令卡住主因是composer_process_timeout默认300秒触发熔断,需结合php.ini的max_execution_time共同调整,并排查依赖、镜像、i/o等深层问题。

Composer 命令卡住不动,大概率是 COMPOSER_PROCESS_TIMEOUT 在作怪
默认值 300 秒(5 分钟),一旦某个操作(比如 composer install 解包大量依赖、或 composer update 进行复杂依赖解析)耗时超过这个阈值,Composer 就会直接中止进程,并抛出类似 ProcessTimedOutException 的错误。这不是网络问题,也不是 PHP 配置问题,而是 Composer 自己的硬性熔断机制。
常见现象:终端卡在 Installing dependencies from lock file 或 Resolving packages 多分钟后突然报错,且无明显网络波动。
- 临时生效:执行前加环境变量,如
COMPOSER_PROCESS_TIMEOUT=1800 composer install(设为 30 分钟) - 全局生效:写入 shell 配置(
~/.bashrc或~/.zshrc),加一行export COMPOSER_PROCESS_TIMEOUT=1800,然后source一下 - 项目级配置(不推荐):不能通过
composer.json设置;config段只支持process-timeout,但该字段已被废弃,实际无效
为什么改了 COMPOSER_PROCESS_TIMEOUT 还是超时?检查是否被 php.ini 的 max_execution_time 截断
Composer 底层用 PHP 执行子进程,但某些关键步骤(如插件初始化、脚本钩子 post-install-cmd)是在当前 PHP 进程内同步运行的——这时受 max_execution_time 控制,和 COMPOSER_PROCESS_TIMEOUT 无关。
典型场景:你在 composer.json 里写了耗时的 scripts,比如跑单元测试或生成文档,哪怕 COMPOSER_PROCESS_TIMEOUT 设得再大,只要 PHP 脚本本身超时,照样失败。
- 确认方式:运行
php -i | grep max_execution_time,看 CLI 模式下的值(注意不是 Web 模式) - 临时绕过:在命令前加
php -d max_execution_time=0,例如php -d max_execution_time=0 $(which composer) install - 长期方案:修改 CLI 专用的
php.ini(路径可通过php --ini查),把max_execution_time设为0(不限制)或足够大的值
COMPOSER_PROCESS_TIMEOUT 不是越大越好:它只影响子进程,且对内存泄漏没用
这个变量只控制 Composer 启动的外部命令(如 git clone、unzip、7z)的最大等待时间,不影响 PHP 主进程逻辑,也不解决根本性能瓶颈。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
如果你频繁需要调高它,大概率说明项目存在更深层问题:
- 依赖树过于庞大或冲突严重 → 运行
composer why-not vendor/package:version定位阻塞点 - 使用了低效仓库(比如直连 GitHub ZIP 包而非
dist镜像)→ 配置国内镜像:composer config -g repo.packagist composer https://packagist.phpcomposer.com - 本地磁盘 I/O 慢(尤其 macOS + Docker 场景)→ 把
vendor/放在非挂载卷路径,或启用composer install --no-scripts跳过耗时脚本
Windows 上设置 COMPOSER_PROCESS_TIMEOUT 容易漏掉 cmd / PowerShell 差异
PowerShell 默认不识别 COMPOSER_PROCESS_TIMEOUT=1800 composer install 这种写法,会报“无法将‘COMPOSER_PROCESS_TIMEOUT’项识别为……”,而 cmd 可以。
正确做法分环境:
- cmd:直接
set COMPOSER_PROCESS_TIMEOUT=1800 && composer install - PowerShell:必须用
$env:COMPOSER_PROCESS_TIMEOUT="1800"; composer install,或者一次性:($env:COMPOSER_PROCESS_TIMEOUT="1800"); composer install - Git Bash / WSL:和 Linux 一致,
COMPOSER_PROCESS_TIMEOUT=1800 composer install
最容易被忽略的是:PowerShell 里用 set 命令设置的环境变量只对当前命令有效,且语法和 cmd 不兼容——跨终端复制粘贴命令时,这里最容易栽跟头。










