composer create-project 国内失败主因是直连 packagist.org 超时,需配置腾讯云/阿里云全链路镜像(如 composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer),并注意镜像地址末尾无斜杠;若仍失败,须用 --repository 手动指定模板 zip 地址或改用 git clone + composer install。

composer create-project 走不通,因为连不上 packagist.org
国内默认直连 packagist.org 会超时或被重置,create-project 命令卡在“Installing dependencies”前就失败,错误信息通常是 Connection refused 或 Operation timed out。这不是你本地配置错,是网络策略导致的。
最直接的解法是换镜像源,但注意:不是所有镜像都支持 create-project 的完整流程——有些只代理 composer install 阶段的包下载,不代理项目模板本身的拉取(比如 Laravel 的 laravel/laravel)。所以得用支持全链路代理的镜像,目前稳定的是腾讯云和阿里云的 Composer 镜像。
- 执行前先设全局镜像:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 再运行初始化命令,例如:
composer create-project laravel/laravel myapp - 如果仍失败,加
-vvv看具体卡在哪一步,大概率是模板仓库(如laravel/laravel)本身没走镜像——这时要手动指定模板的镜像地址(见下一条)
laravel/laravel 这类模板仓库不走镜像?手动指定 --repository
create-project 默认从 Packagist 解析模板包的元数据,再从其 dist.url 下载 ZIP,这个 URL 是硬编码在 composer.json 里的(比如指向 GitHub),根本绕不开镜像配置。所以即使设了全局镜像,它还是去 GitHub 拉 zip,国内大概率失败。
解决办法是跳过 Packagist 解析,直接告诉 Composer 从镜像站拉 ZIP 包。腾讯云镜像提供 https://mirrors.cloud.tencent.com/composer/p2/ 兼容接口,但需配合 --repository 参数显式指定:
- 先查模板包在镜像站的真实 ZIP 地址,例如访问:
https://mirrors.cloud.tencent.com/composer/p2/laravel/laravel.json,找到最新版的dist.url(通常是https://mirrors.cloud.tencent.com/composer/dists/laravel-laravel-10.x.zip) - 然后用
--repository指向一个临时composer.json文件,里面只定义该包的 ZIP 地址,或者直接用 JSON 字符串(Composer 2.2+ 支持):composer create-project --repository='{"packagist.org":false,"laravel/laravel":{"type":"package","version":"10.48.5","dist":{"url":"https://mirrors.cloud.tencent.com/composer/dists/laravel-laravel-10.x.zip","type":"zip"}}}' laravel/laravel myapp - 更稳妥的做法:先用
git clone拉个空模板(如git clone https://github.com/laravel/laravel.git myapp),再进目录跑composer install——此时镜像配置才真正生效
composer install 卡在 “Loading from cache” 或 “Resolving packages”
这其实是 Composer 在后台默默尝试连接 packagist.org 查询包信息,哪怕你已设镜像,某些版本(尤其是旧版 Composer 1.x)仍会先连原站做校验。现象是长时间无响应,strace 可看到反复 connect 到 151.101.2.133(Fastly IP)。
- 升级到 Composer 2.5+,镜像兼容性更好,
config repo.packagist能彻底接管元数据请求 - 确认镜像地址末尾**没有斜杠**:
https://mirrors.cloud.tencent.com/composer✅,https://mirrors.cloud.tencent.com/composer/❌(后者会导致 404) - 删掉
vendor/和composer.lock,重新composer install,避免缓存残留旧源记录 - 如果公司有私有 Git 仓库,确保
composer.json里repositories的顺序正确:自定义源放前面,packagist.org: false放最后
离线环境怎么办?提前打包 vendor + lock 文件
真断网(比如生产服务器完全无外网),靠镜像也没用。这时候必须提前在能联网的机器上把依赖“固化”下来。
核心思路不是复制 vendor/,而是让 composer install 完全不联网——依赖 composer.lock 和本地包缓存(~/.composer/cache)或预下载的 ZIP 包。
- 在联网机器上,用
composer install --no-dev --prefer-dist生成完整composer.lock,并确保所有包都进了缓存(可看~/.composer/cache/files/下是否有对应 hash 目录) - 把整个
~/.composer/cache打包,和项目一起拷到离线机;再在离线机上运行:composer install --no-dev --prefer-dist --no-progress - 如果连缓存都不能传,就用
composer archive打包每个依赖(不推荐,太重);更轻量的是用composer show --tree列出所有包,写脚本批量wget下载 dist ZIP 到本地目录,再通过repositories指向该目录
最关键的细节:离线安装时,composer.lock 里的 dist.shasum 必须和你提供的 ZIP 完全一致,否则校验失败直接退出——别手动生成 ZIP,一定要用 Composer 自己下载的那份。










