composer卡在downloading或hanging时,应优先设置全局process-timeout为0:composer config -g process-timeout 0,因其控制git clone、unzip等子进程超时,而非仅http请求timeout。

Composer install/update 卡在 downloading 或 hanging 怎么办
默认情况下,Composer 的网络请求超时是 300 秒(5 分钟),遇到源慢、包大或网络抖动时,composer install 或 composer update 很容易卡死在 Downloading... 或直接报错 file_get_contents(): SSL operation failed 类错误。这不是你本地环境坏了,而是超时被触发了。
- 临时解决:加
--timeout=0参数(0 表示不限时),例如:composer update --timeout=0 - 但每次输太麻烦,且 CI/CD 脚本里漏写就又失败 —— 所以得设全局配置
-
--timeout只影响下载阶段,不控制脚本执行或 autoloader 生成耗时
如何永久设置全局超时时间
用 composer config 命令写入全局配置,生效范围是当前用户所有项目(除非项目级配置覆盖它):
composer config -g process-timeout 0
注意:process-timeout 控制的是「每个外部进程」(比如 git clone、unzip、php 脚本)的最大运行时间,默认 300 秒;而 timeout(无 process- 前缀)控制的是 HTTP 请求超时,两者不同。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 设为
0表示禁用超时限制,最彻底,适合内网、CI 或可信源场景 - 若想保留一定保护,可设大一点的值,比如
3600(1 小时):composer config -g process-timeout 3600 - 查看当前值:
composer config -g process-timeout - 该配置写入
~/.composer/config.json,可手动编辑,但建议用命令操作避免格式错误
HTTP 超时(timeout)和 process-timeout 的区别
很多人混淆这两个参数,结果改了没效果:
-
timeout:只管 Composer 自己发 HTTP 请求(如访问 packagist.org 或私有 repo 的 API),单位秒,默认 300 -
process-timeout:管所有子进程,包括git、svn、unzip、php等,单位秒,默认 300 - 多数“卡住”现象其实是
git clone慢或 zip 解压大包耗时长,所以process-timeout才是关键 - HTTP 超时可通过
composer config -g timeout 600单独调,但通常没必要 —— 先调process-timeout
CI/CD 或 Docker 环境下要注意什么
在 GitHub Actions、GitLab CI 或 Docker 构建中,composer config -g 写入的是构建容器的临时用户家目录,每次新容器都会丢失。不能只靠一次全局设置。
- 推荐在 CI 脚本开头显式设置:
composer config --global process-timeout 0 - Dockerfile 中可加:
RUN composer config --global process-timeout 0 - 某些镜像(如
composer:2)已默认设为 0,但自建基础镜像务必检查 - 如果用了
COMPOSER_PROCESS_TIMEOUT环境变量,它会覆盖配置文件里的process-timeout,优先级更高
composer.json) > 全局配置(~/.composer/config.json)。别只改配置却忘了环境变量在捣乱。
process-timeout 是救急关键,但设成 0 后,真遇到死循环或挂起的 git 进程,就得靠手动 kill 或超时外层 wrapper 来兜底 —— 这点容易被忽略。










