
Composer卡住本质是网络问题,需优先切国内镜像源、配GitHub Token、调高PHP超时阈值;私有包需设Git代理或改HTTPS克隆;Windows长路径问题则关杀软、提权或禁用符号链接。
Downloading... 或 Cloning... 怎么办本质是网络请求超时或被拦截,不是 Composer 本身故障。国内直连 Packagist 官方源(https://packagist.org)成功率极低,尤其涉及 Git 克隆私有包、下载 ZIP 归档或访问 GitHub API 时,常卡在 Downloading https://api.github.com/... 或 Cloning into '/path/to/vendor/xxx'...。
优先验证是否真卡住:执行 composer install -v 查看最后输出的 URL;若 60 秒无新日志,基本可判定超时。
composer config -g repo.packagist composer https://packagist.phpcomposer.com(已停用)或更稳定的 composer config -g repo.packagist composer https://packagist.proxy.tencent.com
GIT_SSH_COMMAND="ssh -o ConnectTimeout=10 -o ServerAliveInterval=30",或改用 HTTPS 克隆(在 composer.json 中把 "git@github.com:user/repo.git" 换成 "https://github.com/user/repo.git")composer install --no-scripts --no-plugins --ignore-platform-reqs
composer create-project 卡在 Installing dependencies 阶段该阶段本质是静默执行 composer install,但默认不输出详细日志,容易误判为“没反应”。实际可能正卡在下载某个依赖的 ZIP 包。
-vvv 参数强制输出完整过程:compose
r create-project laravel/laravel myapp -vvv,观察卡在哪条 GET 请求https://api.github.com/repos/xxx/xxx/zipball/xxx,说明 GitHub API 调用失败 —— 此时需配置 GitHub Token:在 ~/.composer/auth.json 中添加 {"github-oauth": {"github.com": "your_token_here"}},Token 可在 GitHub Settings → Developer settings → Personal access tokens 创建(勾选 repo 权限)--prefer-source:它强制走 Git 克隆,比 --prefer-dist(下 ZIP)更容易因 SSH/Git 超时卡死Composer update 失败Composer 底层用 PHP 的 cURL 扩展发请求,默认超时值太短(通常 30–60 秒),而大包下载或弱网环境下极易触发 cURL error 28: Operation timed out。
php.ini 中调整 curl.cainfo(确保证书路径正确)并增加 default_socket_timeout = 300;也可临时用命令行覆盖:php -d default_socket_timeout=300 /usr/bin/composer update
composer config -g secure-http false,同时确保 openssl.cafile 在 php.ini 中指向有效证书 bundle(如 /etc/ssl/certs/ca-certificates.crt)http-proxy(如公司内网):composer config -g http-proxy http://proxy.company.com:8080,注意不要漏掉协议头 http://
composer install 卡在 Generating autoload files
这不是网络问题,而是 Windows 文件系统对长路径/符号链接处理异常,尤其在启用 WSL 或 Docker Desktop 的环境中。Composer 会尝试生成大量 vendor/autoload_*.php 文件,NTFS 权限或防病毒软件可能中途阻塞。
vendor 和 composer.lock 后重试:rm -rf vendor composer.lock && composer install --no-dev(PowerShell 用 Remove-Item -Recurse -Force vendor, composer.lock)composer config -g use-symlinks false