composer create-project默认硬编码访问官方源,完全忽略全局镜像配置,必须显式加--repository参数;composer config -g repo.packagist需输出完整json对象才生效,键名、type值、https末尾斜杠三者缺一即静默回退官方源。

直接配阿里云镜像源 + 清缓存 + 验证日志路径,能解决 CodeIgniter 4 安装时 90% 的超时卡死问题;但若 composer create-project 仍直连 packagist.org,说明镜像根本没生效——不是网络差,是配置写错或命令绕过了全局设置。
为什么 composer create-project codeigniter4/appstarter 还是慢
这个命令默认硬编码访问官方源,完全忽略你配的 repo.packagist 全局镜像。它不读 ~/.composer/config.json,也不走 repositories 配置。
- 必须显式加
--repository参数:composer create-project codeigniter4/appstarter myapp --repository=https://mirrors.aliyun.com/composer/ - Composer ≥ 2.2 可用更短的
-r写法:composer create-project -r https://mirrors.aliyun.com/composer/ codeigniter4/appstarter myapp - 如果提示
Repository not found,大概率是镜像站同步延迟,可临时换清华源:-r https://packagist.mirrors.tuna.tsinghua.edu.cn
composer config -g repo.packagist 怎么才算配成功
这条命令极易静默失败,输出空、null 或还是 packagist.org 地址,就等于白配。
- 键名必须是
repo.packagist(单数repo,不是repos或repositories) - 中间必须带
composer类型参数,漏掉就 fallback 到官方源 - URL 必须是 HTTPS 且末尾带
/:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌ - 验证命令只看这一行:
composer config -g repo.packagist,输出必须是完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
配完镜像还卡在 Resolving dependencies
这一步根本没发 HTTP 请求,只做 DNS 查询。改 http.timeout 完全无效,纯属白等。
- 现象包括:
Could not resolve host、unknown host、ping packagist.org失败 - 手动测 DNS:
dig mirrors.aliyun.com @8.8.8.8,看是否返回有效 IP - 临时换系统 DNS:Linux/macOS 改
/etc/resolv.conf加nameserver 8.8.8.8;Windows 在网络适配器里手动设 - 检查
/etc/hosts(或C:\Windows\System32\drivers\etc\hosts)是否误写了错误映射 - 用手机热点试一次——很多企业网会屏蔽
packagist.org和github.com
CI 环境或 Docker 中怎么确保镜像生效
全局配置在容器里常因用户权限或 COMPOSER_HOME 路径未设而失效,项目级更可靠,但要注意覆盖逻辑。
- CI 脚本开头必须加:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 同时设超时:
composer config -g http.timeout 600和composer config -g process-timeout 1200 - 清缓存不能少:
composer clear-cache,否则旧元数据还在用 - 若项目
composer.json有repositories字段,哪怕只写了"packagist": false,也会让全局镜像失效——得删掉或显式设为true - 最后用
composer install -vvv | grep mirrors.aliyun.com确认日志里真出现了镜像域名
最易被忽略的是:create-project 绕过所有配置,以及 Resolving dependencies 阶段根本不走 HTTP —— 这两个点卡住时,调 timeout、换镜像、清缓存全都没用,必须切到 DNS 层排查。











