优先换国内镜像源(如阿里云),删 vendor 和 composer.lock 后重装;ci/cd 启用缓存、设超时、禁用 --prefer-source;排查 ssh 认证、分支支持、稳定性配置及内存限制。

composer install 时卡在 downloading 阶段怎么办
本质是默认源走国外服务器,DNS 解析慢、TCP 连接超时或中间链路丢包都会让 composer install 卡住甚至失败,不是你本地环境有问题。
- 优先换国内镜像源,比如阿里云:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 如果项目已 lock,换源后务必删掉
vendor/和composer.lock再重装(否则仍可能走旧缓存) - 临时禁用 https 验证(仅调试用):
composer config -g secure-http false,避免证书校验失败中断 - 加
-vvv参数看具体卡在哪一步,常见是Downloading https://packagist.org/p/provider-2024-01%24xxx.json这类元数据请求超时
CI/CD 环境里 composer install 经常超时怎么稳住
CI 环境 DNS 不稳定、出口 IP 被限流、无 cache 导致重复下载,比本地更易失败。
- 必须启用缓存:GitHub Actions 用
actions/cache缓存~/.composer/cache;GitLab CI 加cache: key: $CI_JOB_NAME paths: [ ~/.composer/cache ] - 加超时兜底:
composer install --no-interaction --prefer-dist --optimize-autoloader --timeout=600(默认 300 秒不够) - 避免
--prefer-source:它会 clone 整个 git 仓库,网络压力大且易被拒绝,CI 默认用--prefer-dist就行 - 如果用私有包,确保
auth.json已安全注入,否则会卡在认证环节无提示
composer create-project 拉骨架项目失败的典型原因
这个命令本质是先 git clone 或下载 zip,再跑 composer install,两阶段都可能断。
- 失败时先看输出最后一行是不是
Cloning failed using an ssh key或Could not authenticate against github.com—— 这是 SSH key 权限问题,换成 HTTPS 方式:composer create-project vendor/name --repository-url=https://github.com/vendor/name.git - 某些模板项目依赖 dev 分支,而 GitHub 的 zip 下载不支持分支,直接报 404;此时改用
git clone+composer install更可靠 - 用
--stability=dev时,若包未显式声明"minimum-stability": "dev",会因版本解析失败静默退出,加-vvv才能看到真实错误
vendor 目录部署后缺失文件或 autoload 失效
这不是网络问题导致的“失败”,而是网络中断引发的“假成功”——composer install 因部分包下载不全却没报错,后续运行时报 Class not found。
- 检查
vendor/autoload.php是否存在且可 require;不存在说明 autoloader 生成失败,大概率是composer.json格式错误或内存不足 - 运行
composer show,看列表是否完整;若某包名显示为???或直接缺失,说明其composer.lock记录的 dist URL 实际不可达,但 composer 没中止 - 生产部署必须加
--no-dev --optimize-autoloader,否则开发依赖残留+未优化的 autoload 映射会放大加载失败概率 - PHP 内存限制低于 512M 时,
composer install可能中途 kill,但不抛异常,建议部署前设php -d memory_limit=1G $(which composer) install ...
网络抖动本身无法根治,能做的是让失败可感知、可重试、不污染结果。最常被忽略的是:锁文件和镜像源不匹配时,composer install 依然会“成功”完成,只是 vendor 里少几个包。










