插件安装超时需先定位卡点:停在Resolving dependencies是DNS问题,停在Downloading需调http.timeout(300~600),停在Executing command则需调process-timeout(1200),并确认镜像配置正确、清缓存、跳过脚本验证。

插件安装超时不是插件本身的问题,而是 Composer 在下载、解压或执行 install 前置步骤时被网络或 PHP 限制中断;必须先定位卡点,再针对性调参或换源。
看 -vvv 输出最后一行,确认卡在哪个阶段
运行 composer require some/plugin -vvv,紧盯终端最后几行输出:
- 停在
Resolving dependencies:DNS 解析失败,http.timeout完全无效;改/etc/resolv.conf或hosts,或用dig packagist.org @8.8.8.8验证 - 停在
Downloading https://mirrors.aliyun.com/composer/...:HTTP 层卡住,该调http.timeout(建议 300~600) - 停在
Executing command (CWD: ...):插件含 post-install-cmd 脚本(如生成配置、初始化数据库),此时process-timeout才起作用 - 停在
Extracting archive后无响应:ZIP 包损坏或磁盘 I/O 慢,可加--no-scripts --no-plugins先装完再手动处理
http.timeout 和 process-timeout 必须分开设,不能只调一个
这两个参数控制完全不同的环节,漏掉任一都可能白等:
-
http.timeout控单次 HTTP 请求(含 TLS 握手、首字节等待、body 下载),默认仅 60 秒;插件包体积大时极易触发cURL error 28 -
process-timeout控整个命令生命周期(依赖解析 + 下载 + 解压 + 运行脚本),默认 300 秒;含 Laravel Mix 或私有插件时,常因 post-install-cmd 卡死 - 临时生效:用
composer require vendor/plugin --http-basic-timeout=300 --timeout=1200(注意--http-basic-timeout仅 Composer 2.2+ 支持) - 永久生效:运行
composer config -g http.timeout 600和composer config -g process-timeout 1200
插件带 post-install-cmd 时,超时往往出在脚本里
很多插件(如 laravel/sanctum、spatie/laravel-backup)会在 composer.json 中声明 post-install-cmd,这些命令由 PHP 子进程执行,受 process-timeout 管控,但不受 http.timeout 影响:
- 先试跳过脚本:
composer require vendor/plugin --no-scripts,成功后再手动运行php artisan vendor:publish等命令 - 检查脚本是否依赖外部服务(如 Redis、DB),本地未启动会导致无限等待
- 若脚本含交互提示(如
Confirm to proceed?),必须加--no-interaction,否则卡在 stdin 等待 - 某些插件会触发
php artisan config:cache,而APP_KEY未设时会 hang 住——先php artisan key:generate再重试
镜像源配置错误是静默失败的高发区
换源命令看似成功,但插件仍从 packagist.org 拉取,说明镜像根本没生效:
- 键名必须是
repo.packagist(不是repos.packagist或repositories),type 必须为composer,URL 必须以/结尾:https://mirrors.aliyun.com/composer/✅ - 验证是否真生效:
composer config -g repo.packagist应输出完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 换源后必须清缓存:
composer clear-cache,否则旧包仍走失败路径 - 某些插件托管在 GitHub/GitLab,镜像不代理 VCS 地址;若插件 URL 是
git@github.com:或https://github.com/,需单独配 Git 代理或改用 HTTPS 克隆
真正卡住的时候,90% 不是插件写得差,而是 DNS 解析失败、镜像 URL 少了个斜杠、post-install-cmd 里缺环境变量,或者你忘了 clear-cache。调 timeout 只是兜底,定位卡点才是关键。











