composer导出慢90%因镜像未生效、缓存未清、parallel-downloads未调高、composer.lock固化境外dist url及ci用户权限错配;必须删vendor与lock、clear-cache、配置repo.packagist/composer/url末尾斜杠/parallel-downloads/10并验证生效。

Composer 导出(composer install --no-dev --prefer-dist 等场景)慢,90% 不是网络带宽问题,而是元数据拉取、ZIP 下载路径未走镜像、缓存污染或并发不足导致的——尤其在 CI/CD 或多项目批量部署时,等待时间会指数级放大。
为什么 composer install --no-dev 还卡在 Downloading
导出阶段仍需完整解析依赖树并下载 dist 包,但以下问题常被忽略:
-
composer.lock里记录的dist.url仍是https://api.github.com/或https://codeload.github.com/,镜像只改了元数据源,没改 ZIP 实际地址 - 全局配置写对了,但 CI 环境(如 GitHub Actions 的
runner用户)根本没读到你本地的~/.composer/config.json - 没清缓存,Composer 直接复用旧的
packages.json和已损坏的 ZIP 缓存,反复重试失败连接 -
parallel-downloads仍为默认 3,而国内带宽可轻松支撑 8–12 并发
导出前必须执行的三步硬操作
不执行这三项,换再快的镜像也白搭:
- 删掉
vendor/和composer.lock(尤其composer.lock必须删——它固化了原始 dist URL) - 运行
composer clear-cache,否则旧缓存会绕过所有新配置 - 确认当前用户下已设好三项:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/、composer config -g parallel-downloads 10、composer config -g prefer-dist true
验证是否生效:分别运行 composer config -g repo.packagist、composer config -g parallel-downloads,输出必须是非空且匹配预期值。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
CI 环境中 composer install 导出仍慢?检查用户上下文
GitHub Actions、GitLab CI、Docker 构建等场景,composer config -g 很可能写到了错误用户目录:
- GitHub Actions 默认用
runner用户,composer config -g必须在run:步骤中执行,不能只在本地配好就提交 - 宝塔面板「一键部署」实际以
www用户运行,需sudo -u www composer config -g ... - Docker 中若用
USER app,则composer config -g必须在该用户下执行,否则配置文件写进 root 而运行时读不到
最稳做法:在 CI 脚本开头直接写入项目级配置:composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加 -g),它会修改 composer.json 的 repositories 字段,可提交、可复现、不依赖用户环境。
导出后还要压缩包?别让 zip 成瓶颈
导出完成后的 tar -czf 或 zip -r 常被当成“Composer 慢”,其实和 Composer 无关,但容易误判:
- 如果
vendor/里有大量小文件(如monolog的测试用例、phpunit的data/目录),zip压缩本身就会耗几十秒 - 建议导出时加
--no-dev+--optimize-autoloader,再用find vendor/ -name "tests" -o -name "Tests" -o -name "test" -o -name "Test" | xargs rm -rf清理无用目录(Laravel 项目可额外删vendor/laravel/framework/src/Illuminate/Support/Testing) - 真正交付时,优先考虑
tar --zstd(比 gzip 快 3–5 倍)或跳过压缩,直接 rsync 同步
导出加速的关键不在“怎么压”,而在“不让 Composer 在第一步就卡住”——元数据、ZIP 地址、缓存、并发、用户上下文,五者缺一不可。漏掉任意一个,都会让后续所有优化归零。










