换镜像源本身不解决速度问题,真正卡住的环节是元数据拉取失败、缓存未启用、参数没加对——这三者缺一,composer create-project 就大概率卡在 Downloading https://packagist.org/packages.json 上不动。

换镜像源本身不解决速度问题,真正卡住的环节是元数据拉取失败、缓存未启用、参数没加对——这三者缺一,composer create-project 就大概率卡在 Downloading https://packagist.org/packages.json 上不动。
为什么composer config -g repo.packagist总不生效?
不是命令没执行,而是配置写错了或没验证。Composer 对键名、协议、斜杠极其敏感:
-
repo.packagist必须是单数,写成repos.packagist(多一个 s)完全无效,且不报错 - 第二参数必须是
composer(类型标识),不能省略或写成composer-type - URL 必须以
https://开头,且末尾带/,少一个就 404 或触发Could not parse version constraint - 执行后必须用
composer config -g repo.packagist看输出:✅ 正确是完整 JSON,❌ 空、null或仍显示packagist.org,说明根本没生效
composer create-project 还是慢?补上这四个参数
这个命令本质是先克隆骨架再进目录跑 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
缓存路径没配,镜像再快也白搭
只换源不启缓存,每次仍要重下 ZIP;只开缓存不换源,缓存根本拉不到包。二者必须配对:
- 运行
composer config -g cache-files-dir ~/.composer/cache/files(若composer config -g cache-files-dir输出为空,说明缓存未启用) - 设缓存有效期:
composer config -g cache-files-ttl 3600(防因包更新导致旧缓存误用) - 验证是否真走缓存:删掉
vendor/后再跑一次composer install -vvv,看日志里有没有Cache hit或Using cached
CI/CD 或团队协作时,别把镜像写进 composer.json
项目级 repositories 字段会强制所有成员走同一源,在跨地域或 CI 环境里极易出问题:
- ❌ 错误写法:
"repositories": [{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}] - ✅ 正确做法:靠文档约定 + 全局配置,或在 CI 脚本开头加
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 私有包应单独定义源:
composer config --global repositories.my-private '{"type": "composer", "url": "https://private.example.com"}',不覆盖主源
最常被忽略的是缓存路径权限和 TTL 设置——尤其在 Docker 或 root 用户环境下,~/.composer/cache 可能不可写,或缓存过期太久导致反复拉新包。


















