composer create-project 默认超时300秒易失败,推荐用--timeout=1200参数覆盖,该值优先级最高且仅影响http下载阶段;全局config timeout对create-project无效,process-timeout则控制脚本执行而非下载。

create-project 命令默认超时很短,容易失败
Composer 的 create-project 默认使用 300 秒(5 分钟)超时,但实际网络波动、包体积大(如 Laravel + Vue 模板)、或镜像响应慢时,很容易触发 Connection timeout 或 Failed to download 错误。这不是命令本身问题,而是底层 HTTP 客户端(curl 或 php-http)的限制。
用 --timeout 参数直接覆盖全局超时值
最简单有效的方式是在命令末尾加 --timeout,单位是秒,支持小数:
composer create-project laravel/laravel myapp --timeout=1200
这个参数会覆盖 config.timeout 和 config.process-timeout,且优先级最高。注意它只影响当前命令的 HTTP 下载阶段,不影响后续脚本执行。
-
--timeout=0表示禁用超时(不推荐,可能卡死) - 值设为
600(10 分钟)通常够大多数国内镜像场景 - 如果仍失败,说明问题不在超时,而是 DNS、代理或镜像源本身不可用
永久修改需改 config,但对 create-project 效果有限
虽然可以用 composer config -g timeout 1200 设置全局 timeout,但 create-project 在初始化阶段会忽略用户 config,优先读取内置默认值或命令行参数。所以临时项目建议始终显式加 --timeout,而不是依赖配置。
-
process-timeout控制的是 post-install-cmd 等脚本执行时间,和下载无关 - 某些旧版 Composer(--timeout,需升级:
composer self-update - 如果用了代理或自定义 repo,还要确认
http-proxy配置没引入额外延迟
遇到 timeout 还要检查是否被重定向或镜像失效
单纯调高 timeout 可能掩盖真实问题。比如你用 packagist.phpcomposer.com,但它已停用多年,请求会卡在 DNS 或 302 跳转里,此时加再大 timeout 也没用。
- 运行
composer config -g repos.packagist确认镜像地址是否有效(推荐:https://packagist.org 或阿里云 https://mirrors.aliyun.com/composer/) - 加
-v参数看详细日志:composer create-project laravel/laravel myapp --timeout=1200 -v,观察卡在哪一步(DNS / CONNECT / SSL / DOWNLOAD) - 若日志中出现
Could not resolve host,说明是 DNS 或网络问题,不是 timeout 设置低
-v 输出,比盲目调数字更省时间。











