必须严格满足三要素:键名repo.packagist(单数)、type值为composer、url以https://开头且末尾带/,缺一即静默回退官方源;验证需输出完整json如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。

composer config -g repo.packagist 配置必须严格满足三要素
镜像不生效,90% 是因为 composer config -g repo.packagist 这条命令写错。它不是“随便设个 URL 就行”,而是有三个硬性要求:
- 键名必须是
repo.packagist(单数,不能写成repos.packagist或repository.packagist) - 第二个参数必须是
composer(表示 type,不是git、vcs或留空) - URL 必须以
https://开头,且末尾带/(例如https://mirrors.aliyun.com/composer/,少斜杠会 404 或触发Could not parse version constraint)
验证是否成功:运行 composer config -g repo.packagist,输出必须是完整 JSON,比如:
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
如果输出为空、null、https://packagist.org 或报错,说明配置失败。常见原因包括:当前用户无写权限(尤其在 root 下执行但 Composer 配置文件属普通用户)、Composer 版本低于 2.0、命令中多敲了空格或用了中文标点。
安装 Laravel 10/11 时必须显式指定版本约束
直接运行 composer create-project laravel/laravel 很可能拉到预发布版(如 11.x-dev)或与 PHP 版本不兼容的包,导致后续报错或卡死。Laravel 10 要求 PHP ≥ 8.1,Laravel 11 要求 PHP ≥ 8.2,不锁版本极易踩坑。
正确做法是带上明确的版本约束:
- Laravel 10:
composer create-project laravel/laravel:^10.0 myapp - Laravel 11:
composer create-project laravel/laravel:^11.0 myapp
注意:^10.0 表示允许 10.x 的所有小版本更新(如 10.42.0),但不会升级到 11.0;^11.0 同理。不要用 "10.*" 或 "11.x",Composer 解析不一致,部分版本会误匹配 dev 分支。
create-project 命令必须加 --repository 参数才走镜像
composer create-project 分两步:第一步从 GitHub 克隆 skeleton(走 GitHub API),第二步进目录执行 composer install(这时才走 repo.packagist 镜像)。如果你只配了全局镜像,但没给 create-project 加 --repository,第一步仍可能卡在 GitHub 限流上。
解决方法是显式传入镜像地址:
composer create-project laravel/laravel:^11.0 myapp --repository=https://mirrors.aliyun.com/composer/-
--repository-url和--mirror是无效参数,Composer 不识别,会静默忽略
验证是否真正走镜像:加 -vvv 看日志,出现 GET https://mirrors.aliyun.com/composer/packages.json 才算成功。若看到 GET https://repo.packagist.org/,说明没生效。
加速依赖安装必须配合 --prefer-dist --no-dev --optimize-autoloader
Laravel 初始化本质是一次完整的 composer install,光换镜像不够,还要减少网络请求和本地解析开销:
-
--prefer-dist:强制下载 ZIP 包,跳过 git clone 和 submodule 同步(实测快 2–5 倍) -
--no-dev:新项目不需要phpunit、laravel/pint等开发依赖,省下 30+ 个包 -
--optimize-autoloader:生成vendor/autoload.php的静态类映射,避免运行时扫描文件 -
--no-interaction:防止交互提示阻塞自动化流程(尤其 CI 场景)
完整命令示例:
composer create-project laravel/laravel:^11.0 myapp --repository=https://mirrors.aliyun.com/composer/ --prefer-dist --no-dev --optimize-autoloader --no-interaction
这四个参数缺一不可——漏掉 --no-dev 可能多装 40+ 个包;漏掉 --prefer-dist 会让 Composer 在 GitHub 上反复拉取源码分支;漏掉 --optimize-autoloader 则后续每次请求都要重新扫描类文件。











