私有源缓存特别占空间是因为 composer 不对私有源元数据去重,每次 update 都全量下载并保存 packages.json 和 provider-*.json 文件,长期积累可达 500mb 以上。

私有源缓存为啥特别占空间
因为 Composer 对私有源(如 Satis、Private Packagist、GitLab Package Registry)的元数据不做去重,每次 composer update 都会把整份 packages.json 和所有 provider 映射文件(provider-*.json)重新下载并存进 ~/.composer/cache/repo/https---your-private-repo.com/。这些文件不压缩、不合并,长期积累下来,一个中等规模私有源缓存轻松破 500MB —— 尤其当你的私有包频繁发版、又没清理机制时。
只清私有源元数据,别碰全局 repo 目录
执行 composer clear-cache 会连带清掉 Packagist 的元数据,但你真正想动的只是私有源那块。安全做法是精准定位并删除对应子目录:
- 先查路径:
composer config --global cache-dir→ 得到类似~/.composer/cache - 进
repo/子目录:ls -l ~/.composer/cache/repo/,找形如https---packages.example.com或https---gitlab.internal.com的目录 - 确认无误后删:
rm -rf ~/.composer/cache/repo/https---packages.example.com - Windows 用户注意:PowerShell 中路径含冒号,需用引号包裹,例如:
Remove-Item -Recurse -Force "$env:APPDATA\Composer\Cache\repo\https---packages.example.com"
私有包 ZIP 缓存也要定期筛
私有包的 dist 归档(.zip)默认也存在 files/ 下,命名规则和 Packagist 一致:vendor-name-package-name-version.zip。但私有源往往没被 composer show --all 列出,所以不能靠 grep abandoned 判断是否废弃。
更可靠的做法是:遍历所有项目 composer.lock,提取私有源包名+版本,再比对 files/ 中实际存在的归档:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 查哪些包来自私有源:
grep -A5 '"type": "package"' composer.lock | grep '"name"' | cut -d'"' -f4(适用于手动检查单个项目) - 汇总所有项目正在用的私有包版本:
find /path/to/projects -name composer.lock -exec jq -r '.packages[]? | select(.source?.url? | contains("example.com")) | "\(.name) \(.version)"' {} \; 2>/dev/null | sort -u - 进
~/.composer/cache/files/,用find . -name "*example-com*" -name "*.zip" | xargs ls -lt看修改时间,挑出半年未被引用且不在上述列表里的 ZIP 手动删
部署脚本里加一行,避免私有缓存越积越多
CI/CD 流水线或部署脚本中,别只依赖 composer clear-cache。私有源元数据更新滞后、ZIP 多余堆积,都是静默问题。建议在 composer install 前插入清理步骤:
composer clear-cache rm -rf $(composer config --global cache-dir)/repo/https---packages.example.com # 可选:只清私有源 ZIP,保留 Packagist 的 find $(composer config --global cache-dir)/files -name "*example-com*" -name "*.zip" -mtime +180 -delete
注意:-mtime +180 表示“180 天前修改”,避免误删刚发布的测试版;如果私有源域名含下划线或特殊字符,find 的匹配要改用 -regex 或 grep -E 辅助。
最易被忽略的一点:私有源的 vcs/ 缓存(比如 GitLab 私有仓库的裸克隆)同样不自动清理,且体积常比 files/ 更大。只要确认项目不再从该 Git 地址拉取,就可以放心执行 rm -rf ~/.composer/cache/vcs/* —— 下次需要时会重建,不会影响功能。










