composer clear-cache 在 ci 中不能随便运行,因为它会清空整个 composer 缓存目录(如 ~/.composer/cache),导致后续 composer install 重新下载全部依赖,显著拖慢构建速度,还可能触发 github api 限流;应结合 find 按访问时间精准清理过期文件,并在缓存超 2gb 时才触发,优先用 composer config cache-dir 动态获取路径,避免硬编码。

为什么 composer clear-cache 在 CI 里不能随便跑
它会清掉整个 Composer 缓存目录(通常是 ~/.composer/cache),包括所有已下载的包、dist 文件、metadata 和 zip 解压产物。CI 每次构建若都执行,会导致后续 composer install 重新下载全部依赖,显著拖慢构建时间——尤其在低带宽或高并发的共享 runner 上,还可能触发 GitHub API 限流(因重新 fetch metadata)。
如何只清理过期/无效缓存而不伤有效数据
Composer 自身不提供“按时间/按项目清理”能力,但可通过组合系统命令精准控制。关键思路是:保留最近 7 天内被访问过的缓存项,其余删除。
- 用
find ~/.composer/cache -type f -mtime +7 -delete清理文件级缓存(dist/、files/、repo/下的旧文件) - 跳过
archived/目录(它存的是已安装包的 zip 副本,删了会强制重下载,不建议动) - 加
-maxdepth 3防止误删深层嵌套的活跃缓存结构 - 先用
find ... -print预览再加-delete,避免脚本首次运行误伤
CI 中定时执行的可靠写法(以 GitHub Actions 为例)
不要依赖 cron job 或后台守护进程——CI 环境无持久状态。应把清理逻辑嵌入构建流程,在 composer install 前、且仅当缓存目录过大时触发。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 用
du -sh ~/.composer/cache | awk '{print $1}' | sed 's/G//'提取缓存大小(GB) - 当结果 > 2 时执行清理(
if (( $(echo "$size > 2" | bc -l) )); then ...) - 务必加上
set -e和错误捕获:清理失败不能阻断主构建,但需echo "Cache cleanup failed, proceeding..." - GitHub Actions 中推荐放在
cache步骤之后、composer install之前,用run内联 shell
容易被忽略的兼容性坑
不同 PHP 版本和 Composer 版本缓存结构略有差异:composer v2.5+ 把 repo/ 改为 repos/,dist/ 下的文件名哈希规则也变了。硬编码路径会失效。
- 优先用
composer config cache-dir动态获取路径,而非假设~/.composer/cache - 清理前先
ls -d ~/.composer/cache/{dist,files,repo*,repos} 2>/dev/null判断目录是否存在 - Alpine Linux 镜像中
bc默认未安装,用awk '$1 > 2048 {print}' 替代 GB 比较更稳妥
缓存清理不是越勤越好,关键是识别“真正冗余”的数据——CI 的临时性决定了它不需要保留历史版本,但也不能为了省空间牺牲可复现性。










