多人协作时vendor重建常态源于缓存路径、key、生命周期未对齐:本地~/.composer/cache默认存在,ci需显式缓存vendor/和$composer_home/cache/,key用${ci_commit_ref_slug}-${ci_pipeline_id}更可靠,私有包须预置auth,缓存失效信号包括反复下载、构建时间波动大、strace显示连海外ip。

缓存没用对,多人协作时 vendor 重建就是常态——不是网络问题,是缓存路径、key、生命周期三者没对齐。
为什么团队里有人快有人慢?缓存根本没共享
本地开发时 ~/.composer/cache/files/ 默认存在,但 CI 流水线里没人显式声明 cache: paths:,vendor 和 .composer/cache/ 就不会跨 job 保留。GitLab CI 写个 - vendor/ 就完事?不行——只缓 vendor 不缓 Composer 自身缓存,下次 composer install 还得重新下载 zip 包。
- 必须同时缓存
vendor/和~/.composer/cache/(或$COMPOSER_HOME/cache/) - 缓存 key 必须稳定:用
${CI_COMMIT_REF_SLUG}-${CI_PIPELINE_ID}比用${CI_COMMIT_TAG}更可靠(后者在非 tag 流水线里 fallback 到默认键) - 私有包需提前注入
composer auth配置到 CI 变量,否则缓存虽在,install仍会因认证失败退化为重拉
缓存失效的三个典型信号
缓存看似开了,但实际不命中,常见现象:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
composer install日志里反复出现Downloading ...,且.composer/cache/files/目录下空空如也 - CI 构建时间波动极大,同一 commit 有时 2 分钟,有时 8 分钟
-
composer show -p显示源地址正确,但strace -e trace=openat,connect发现仍在连海外 IP
根本原因:缓存 key 错、COMPOSER_HOME 路径未统一、或镜像源切换后没清旧缓存(composer clear-cache 必须跟在换源命令之后)。
本地与 CI 缓存策略要错开
开发机和 CI 环境目标不同,缓存配置不能一刀切:
- 本地开发建议设
composer config -g cache-files-ttl 15552000(6 个月),避免频繁失效 - CI 中应设更短 TTL 或依赖 key 变更自动刷新,防止 stale cache 污染构建结果
- CI 不要跑
composer self-update:它会改.composer/下二进制和配置,导致缓存失效 - 团队共用的 Dockerfile 里,
RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/必须放在composer install之前,且不可被覆盖
最易被忽略的是缓存和 composer.lock 的耦合关系:lock 文件里记录的 dist URL 若仍指向 packagist.org,哪怕全局配了阿里云镜像,Composer 也可能 fallback 回源校验 hash——这时删掉 vendor/ 和 composer.lock 重生成,比硬调参数更干脆。










