composer安装慢90%因镜像未生效(键名repo.packagist、type必填composer、url末尾带/三者缺一即静默回退)、缓存未清、权限错位或xdebug启用;须验证config输出为完整json、执行clear-cache、加--prefer-dist等参数并禁用xdebug。

Composer 导出(composer install 或 composer update)慢,90% 不是项目本身问题,而是镜像未生效、缓存污染、配置写错或权限错位。真正卡住的环节往往在元数据拉取和包下载阶段,不是“程序太慢”,而是它在反复失败重试。
确认镜像是否真正生效
很多人执行了 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就以为完事了,但实际没生效。原因很具体:
-
repo.packagist写成repos.packagist(多一个 s)→ 静默忽略,不报错也不生效 - 漏掉中间的
composer类型参数 → 自动 fallback 到https://packagist.org - URL 末尾没斜杠,比如
https://mirrors.aliyun.com/composer→ 返回 404 或空响应,Composer 自动降级 - 执行命令的用户 ≠ 运行 Composer 的用户(如宝塔用
www用户,你配的是root)→ 配置根本没读到
验证方式只有一条:在**实际运行环境里**执行 composer config -g repo.packagist,输出必须是完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。其他任何结果都等于没配。
清缓存比换源还关键
镜像配对了,但 composer install 依然卡在 Loading composer repositories?大概率是旧缓存还在用。Composer 会优先从本地缓存读 packages.json 元数据,哪怕你已经切了国内镜像,它仍可能拿着 packagist.org 的过期缓存去解析依赖。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须执行
composer clear-cache,不能跳过 - CI 环境中若用了
tmpfs或容器临时目录,cache-dir可能被清空,建议显式指定:composer config -g cache-dir /path/to/stable/cache - 验证缓存是否清干净:删掉
~/.composer/cache/后再跑一次composer install -v,看日志里请求的 URL 是否变成镜像地址
下载阶段提速的硬核参数
元数据拉下来了,但 Downloading xyz/abc (v1.2.3) 还是慢?这是 ZIP 包下载环节,受并发数、包格式、Xdebug 影响极大:
- 启用并行下载:
composer config -g parallel-downloads 10(Composer 2.2+),旧版用concurrent.http.max-parallel-downloads - 强制走压缩包而非 Git clone:
composer config -g prefer-dist true,避免触发 Git 协议握手和 shallow clone - 生产环境必加:
--no-dev --optimize-autoloader --prefer-dist,三者组合实测可将耗时压到默认的 1/4 - Xdebug 必须关:它会让依赖解析慢 5–10 倍,临时禁用命令是
php -d xdebug.mode=off composer install
为什么 composer install 有时比 update 还慢
install 本该秒级完成——它只按 composer.lock 解压 vendor。但它变慢,往往因为这些隐藏动作:
- vendor 目录存在但部分包损坏,Composer 会逐个校验完整性(尤其启用了
--prefer-dist) - 项目
composer.json里写了repositories字段 → 直接覆盖全局镜像,且可能指向已失效的私有源 - PHP OPcache 开启但
opcache.validate_timestamps=1→ 每次加载 autoloader 都 stat 文件,拖慢整个流程 - 某些废弃插件(如
fxp/composer-asset-plugin)仍在全局启用,会额外发起元数据请求
最稳妥的排查路径是加 -vvv 看日志卡在哪一行,重点关注 Downloading https://... 和 Writing lock file 之间的延迟——前者是网络问题,后者是本地计算或校验瓶颈。










