直接换国内镜像源、启用本地缓存并加--prefer-dist --no-dev --optimize-autoloader --no-interaction四参数,可使composer create-project laravel/laravel从卡顿变为秒级完成;核心在于解决DNS慢、TLS失败、缓存未命中及元数据反复请求问题。

直接换国内镜像源 + 启用本地缓存 + 加上三个关键参数,composer create-project laravel/laravel 从卡住到秒出 vendor 目录是常态,不是玄学。
为什么 create-project 卡在 “Installing dependencies” 就不动了?
这行日志背后不是在解压,而是在反复请求 Packagist 的元数据索引(如 packages.json、provider-laravel~10.0.json)。默认直连 packagist.org,DNS 解析慢、TLS 握手失败、CDN 节点远,国内成功率常低于 40%。哪怕只卡住一次 provider 请求,整个流程就会重试 3–5 轮,叠加 Laravel 默认依赖的 80+ 个包,耗时自然飙升。
常见错误现象:
-
Could not fetch packages.json或Connection timed out - 同一台机器第二次运行仍要 5 分钟以上
-
-vvv日志里大量GET https://repo.packagist.org/...请求
composer config -g repo.packagist 必须配,且必须配对缓存路径
只改镜像源不配缓存,速度提升有限;只开缓存不换源,缓存根本拉不到包。二者缺一不可。
执行以下三步,确保全局生效:
-
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意末尾斜杠不能少) -
composer config -g cache-files-dir ~/.composer/cache/files(若composer config -g cache-files-dir输出为空,说明缓存未启用) -
composer config -g cache-files-ttl 3600(防因包更新导致旧缓存误用)
验证是否真正生效:composer config -g repo.packagist 应输出镜像 URL;再跑 composer show packagist/support -vvv,看请求地址是否含 mirrors.aliyun.com。
create-project 命令必须带这四个参数
Laravel 初始化本质是一次完整的 composer install,所以生产级优化参数同样适用:
-
--prefer-dist:强制走 ZIP 包下载,跳过git clone和 submodule 同步(实测快 2–5 倍) -
--no-dev:Laravel 新项目初始化阶段完全不需要phpunit、laravel/pint等开发依赖 -
--optimize-autoloader:生成静态类映射,减少后续 autoload 阶段文件扫描 -
--no-interaction:避免交互式提示阻塞自动化流程
完整命令示例:
composer create-project laravel/laravel myapp --prefer-dist --no-dev --optimize-autoloader --no-interaction
Docker 或 CI 环境中容易漏掉的缓存挂载点
很多 GitHub Actions 用户只缓存 ~/.composer/cache,但忘了 composer create-project 还依赖 composer.lock 与基础镜像 PHP 版本的一致性。一旦 PHP 小版本升级(如 8.2.12 → 8.2.13),Composer 会判定缓存失效,重新下载全部包。
安全做法:
- CI 中固定 PHP 版本(如
php:8.2-cli而非php:8.2) - 缓存路径必须包含
~/.composer/cache和vendor/(若允许复用前次构建结果) - 加
platform锁定扩展版本:"platform": {"php": "8.2.12", "ext-gd": "8.2.12"}写进composer.json
最易被忽略的是:镜像同步有延迟,新发布的 Laravel 小版本(比如刚发的 v11.9.2)可能在阿里云镜像上滞后 5–30 分钟。此时 create-project 会 fallback 到官方源,导致超时——遇到这种情况,临时切中科大源更稳:composer config -g repo.packagist composer https://mirrors.ustc.edu.cn/composer/。


















