优先换阿里云镜像并设process-timeout=1800、http-basic-timeout=300,严格满足repo.packagist键名单数、第二参数为composer、URL以https://开头且末尾带/,验证输出必须为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。

Mac 上安装 Laravel 7 卡在 Composer 超时,90% 是因为默认连 packagist.org 失败,不是你网络差,是它根本连不上。 Laravel 7 对 Composer 1.9+ 和 PHP 7.2.5+ 有明确要求,但超时问题几乎全出在下载环节——换镜像 + 调超时参数,5 分钟内能跑通。
composer config -g repo.packagist 配错就白忙
Mac 用户最容易栽在这一步:命令看似执行成功,实际没生效。必须严格满足三个条件:
- 键名是
repo.packagist(单数,不能写成 repos.packagist) - 第二参数必须是
composer(不是git,也不是空) - URL 必须以
https://开头,且末尾带/(例如https://mirrors.aliyun.com/composer/)
验证是否生效,只看这一条命令输出:
composer config -g repo.packagist
正确结果必须是完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。如果只返回 URL 字符串或报错,说明配置失败,重配。
process-timeout 和 http-basic-timeout 得一起调
Laravel 7 安装常卡在 Downloading https://packagist.org/packages.json 或某个 provider 文件,这是双层超时在起作用:
-
process-timeout控制整个composer create-project生命周期,默认 300 秒 -
http-basic-timeout控制单次 HTTP 请求(比如拉一个 zip 包),Composer 2.x 才支持,默认仅 60 秒
Mac 上推荐一次性设好:
composer config -g process-timeout 1800<br>composer config -g http-basic-timeout 300
注意:http-basic-timeout 在 Composer 1.x 不生效,所以如果你的 composer --version 显示 1.x,请先升级:composer self-update(Laravel 7 完全兼容 Composer 2.x)。
laravel/laravel:^7.0 安装慢?加 --prefer-dist --no-dev -o
composer create-project laravel/laravel:^7.0 myapp 默认走源码克隆 + 全量依赖 + 动态 autoload,Mac 上 SSD 再快也扛不住。必须加参数:
-
--prefer-dist:强制下预编译 zip 包,比 git clone 快 3–5 倍 -
--no-dev:跳过phpunit、fzaninotto/faker等开发依赖,减少 30%+ 解析时间 -
-o(即--optimize-autoloader):生成 classmap,避免运行时遍历文件
组合命令:
composer create-project --prefer-dist --no-dev -o laravel/laravel:^7.0 myapp
如果仍卡在 Generating autoload files,大概率是 Mac 的 Spotlight 或 Time Machine 正在扫描 vendor/ 目录,临时禁用或改用 composer install --no-autoloader 后手动 composer dump-autoload -o。
为什么换了镜像还卡在 Resolving dependencies
这不是网络问题,是 Laravel 7 的依赖约束太紧(比如硬绑 symfony/console:^5.0),Composer 的 SAT 求解器在暴力回溯冲突版本。此时换镜像、调超时全无效。
立刻做两件事:
- 加
-vvv --profile看日志停在哪一行;如果出现Resolving dependencies through SAT,确认是约束问题 - 运行
composer why-not symfony/console:5.4(替换成你怀疑的包),它会直接列出哪一行require或conflict在挡路
Mac 上常见干扰项:laravel/framework 的 require 和你本地 composer.json 里某个旧包冲突,删掉那个旧包再试,比等 SAT 回溯快得多。


















