直接换国内镜像源+启用本地缓存可使composer install提速3–5倍;主因是未配镜像、未清缓存、未锁PHP扩展版本,导致DNS解析慢、TLS握手不稳定、重复下载包。

直接换国内镜像源 + 启用本地缓存,就能让 composer install 速度提升 3–5 倍。不配镜像、不清缓存、不锁 PHP 扩展版本,是 Laravel 项目部署卡在依赖阶段的三大主因。
为什么 composer install 在 Laravel 里特别慢
不是 Laravel 本身重,而是它默认拉取的包生态庞大(symfony/*、monolog/monolog、nesbot/carbon 等几十个),且每个包都带元数据解析和版本约束求解。Packagist 官方源对国内用户 DNS 解析慢、TLS 握手不稳定、大包下载易中断,叠加 Composer 默认不强制启用缓存(尤其 CI 环境或新 Docker 镜像),就会反复下载同一份 .zip 或 .tar。
常见错误现象:
-
Connection timed out或Failed to download vendor/package - 同一台机器上第二次
composer install仍耗时 >2 分钟 - Docker 构建时每次
RUN composer install都从零下载
必须配置的国内镜像源(阿里云 or 腾讯云)
仅改源就能解决 70% 的超时问题。注意:全局配置(-g)比项目级更可靠,尤其在 CI/CD 中。
执行以下任一命令(推荐阿里云):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否生效:
composer config -g repo.packagist
输出应为 https://mirrors.aliyun.com/composer/,而非默认的 https://packagist.org。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
容易踩的坑:
- Windows 用户若用 WSL,需分别在 Windows 和 WSL 里各配一次
-g配置 - 某些旧版 Composer(https://mirrors.aliyun.com/composer/,要降级用
https://packagist.phpcomposer.com - Docker 构建中,不能只写
RUN composer config -g ...,必须确保该命令在composer install前执行,且用户权限一致(避免 root 配置、www-data 运行)
缓存预热:让 composer install 秒级完成
Composer 缓存默认开启,但「缓存是否命中」取决于三个关键点:PHP 版本、平台配置、镜像源一致性。Laravel 项目常因忽略后两者导致缓存失效。
实操建议:
- 固定 PHP 小版本(如
8.3.5),避免8.3→8.3.6升级后缓存被弃用 - CI/CD 中显式声明平台配置:
composer install --no-interaction --prefer-dist --optimize-autoloader --platform=php:8.3.5 - Docker 构建时,把缓存目录挂载出来(例如
-v $(pwd)/.composer-cache:/root/.composer/cache),避免每构建一次清空 - 手动清理坏缓存:
composer clear-cache,再composer install—— 比反复重试快得多
性能影响:启用 --optimize-autoloader 后,vendor/autoload.php 会生成 classmap,类加载快 20%+;但首次安装略慢,适合生产环境。
CI/CD 和 Docker 中的缓存复用技巧
GitHub Actions、GitLab CI 或自建 Jenkins 最容易忽略「缓存键」设计,导致缓存永远不命中。
关键点:
- 缓存键必须包含:
composer.lock的 hash + PHP 版本 + 镜像源地址(如aliyun) - 不要只用
composer.lockhash —— 同一份 lock 文件在不同 PHP 版本下解出的依赖可能不同 - Docker 多阶段构建中,在
build阶段运行composer install后,用COPY --from=build /app/vendor /app/vendor复用,而非在final阶段重装 - 若使用
composer create-project,加--no-install参数跳过自动 install,自己控制缓存时机
最容易被忽略的是:Laravel 11+ 的 composer.json 默认启用了 "minimum-stability": "stable" 和 "prefer-stable": true,这会让 Composer 多做一轮稳定性判断 —— 在缓存未命中的情况下,会显著拖慢首次解析。可临时设为 false 加速调试,但上线前务必改回。


















