换源是精准清理缓存的必要前提,否则clear-cache仅清files/和部分provider,不清理cache/repo/中硬编码packagist.org路径的过期元数据,导致反复回源失败、占inode;vcs/目录需手动禁用并删除,挪缓存路径至大分区更治本。

换源本身不省空间,但它是后续精准清理缓存的必要前提;不配对镜像地址,composer clear-cache 就只是清了一半,cache/repo/ 和 cache/files/ 里仍堆着 packagist.org 的失效 ZIP 和过期 provider 快照。
为什么 composer clear-cache 换源前基本无效
Composer 默认每 15 分钟复用本地 packages.json 缓存,且元数据(如 provider-laravel~10.0.json)和 ZIP 包是分开缓存的:clear-cache 只删 cache/files/ 和部分 provider 缓存,但不动 cache/repo/ 下的元数据文件。这些文件里还硬编码着 packagist.org 的请求路径,下次 update 仍会尝试回源校验——结果就是反复拉失败、写空文件、占 inode。
换镜像后执行 clear-cache 才真正起效,因为:
- 新元数据统一走镜像站 URL,缓存目录名变成
https---mirrors-aliyun-com-composer/,旧packagist.org目录被彻底废弃 - provider 分片(如
provider-symfony~6.0.json)同步延迟虽存在,但至少不再混杂两个源的碎片 - 后续所有
install/update请求都命中同一套结构一致的元数据,避免因 URL 不匹配导致的重复下载或签名错误
cache/vcs/ 是磁盘和 inode 双杀,禁用比清理更关键
这个目录默认不参与 clear-cache,单个 Git 裸仓库就占 300–800 MB,含上万小文件。当 df -i 显示 inode Use% ≥ 95% 时,cache/vcs/ 几乎总是头号目标。
正确做法不是等它爆满再删,而是提前禁用:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先关掉:运行
composer config --global cache.vcs false - 再清残留:Linux/macOS 执行
rm -rf ~/.composer/cache/vcs/,Windows 执行rd /s /q "%APPDATA%\Composer\Cache\vcs" - 副作用仅限首次
update稍慢(改走--prefer-dist),但能彻底阻断裸仓库再生
缓存路径挪到大分区,比反复 clear-cache 更治本
默认缓存常落在 C 盘(Windows)或 /home(Linux),而真正空闲的是 D 盘或 /mnt/data。清缓存只是擦边球,换位置才是治本。
操作分三步:
- 查当前路径:
composer config --global cache-dir - 设新路径:Linux/macOS 运行
composer config --global cache-dir "/mnt/data/composer-cache" - 必须验证:目标目录存在、可写、非 NFS 挂载点;否则解压 ZIP 时会报
failed to open stream: Permission denied
临时目录 sys_get_temp_dir()(即 /tmp 或 %TEMP%)也得管——Composer 解压 ZIP、生成 autoload、跑脚本全往这儿塞,但它也不进 clear-cache 范围。
cache-ttl 和 cache-files-ttl 必须手动调,换源不自动重置
三者作用域独立、单位均为秒,且互不影响:
-
cache-ttl控制packages.json是否重拉,默认 600 秒(10 分钟)。开发阶段建议设为 30:composer config -g cache-ttl 30 -
cache-files-ttl控制 ZIP 包是否复用,默认 15552000 秒(6 个月)。日常开发推荐设为 86400(24 小时):composer config -g cache-files-ttl 86400 - 改完必须立刻
composer clear-cache,否则新策略不生效——它只影响后续请求,不自动清理已有文件
最易忽略的是:Docker 构建中这些 TTL 配置基本无效,因为每次都是全新容器,~/.composer/cache 根本不存在;真正起作用的是构建层顺序 + composer.lock 的稳定性。

















