直接改全局缓存路径即可,所有后续 composer install 都会写入并复用该位置;默认路径(~/.composer/cache 或 %appdata%\composer\cache)本就全局共享,但易被环境变量或镜像覆盖,执行 composer config -g cache-dir /path/to/shared/composer-cache 统一路径,需确保目录存在、可读写且无空格或中文。

怎么让多个项目共用同一个 Composer 缓存目录
直接改全局缓存路径即可,所有后续 composer install 都会写入并复用该位置。默认路径(~/.composer/cache 或 %APPDATA%\Composer\Cache)本就已是“全局”,但容易被环境变量或公司镜像覆盖,导致实际缓存分散。
执行这行命令强制统一:
composer config -g cache-dir /path/to/shared/composer-cache
Linux/macOS 建议选挂载在大分区的路径,比如 /data/composer-cache;Windows 可用 C:\SharedComposerCache。改完后所有项目(包括新 clone 的)都会走这个目录,无需每个项目单独配置。
- 改之前先确认当前路径:
composer config --global cache-dir - 路径里不能有空格或中文(尤其 Windows 下),否则某些版本会静默失败
- 确保目标目录权限可读写,否则
composer install会报Permission denied而不是明确提示缓存失败
为什么共享缓存后磁盘没明显变小
因为缓存复用不等于自动删旧——旧包仍留在 files/ 和 vcs/ 里,只是新项目不再重复下载。真正释放空间得靠清理策略,不是光共享就能省。
-
files/目录存的是 .zip/.tar 包,按cache-files-ttl(默认 6 个月)过期,但不会自动删,得手动触发 GC -
vcs/是最大隐患:每个 Git 包克隆一个裸仓库,300–800 MB/个,且默认不参与clear-cache,也不受 TTL 控制 - 运行
composer clear-cache --gc才会按cache-files-maxsize和 TTL 清理过期项;没设cache-files-maxsize就只清过期,不控总量
如何安全禁用 vcs 缓存避免磁盘爆炸
vcs/ 是唯一必须主动关掉的部分。它几乎从不复用,却吃最多空间和 inode,禁用后所有 Git 包强制走 --prefer-dist(即下载压缩包),体积小、速度快、无 .git 垃圾。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
永久禁用命令:
composer config -g cache-vcs false
禁用后立刻生效,但已存在的 vcs/ 内容不会自动删,得手动清理:
- Linux/macOS:
rm -rf $(composer config --global cache-dir)/vcs - Windows:
rd /s /q "%APPDATA%\Composer\Cache\vcs" - 删前确认 Composer 没在运行,否则可能残留锁文件(
repo.lock)导致后续命令卡住
共享缓存下 CI/CD 构建反而变慢?检查这几个点
共享缓存本应加速,但如果构建机频繁重装或并发高,反而拖慢,常见原因是缓存争抢或元数据陈旧。
- 不要在 CI 脚本里无脑加
composer clear-cache:缓存复用是常态,清了就得重下,尤其含大前端资产的包(如laravel/ui) - 确保
composer.lock提交进 Git:否则每次install都要重新解析依赖树,缓存再好也救不了 - CI 环境建议加
--no-interaction --prefer-dist --no-dev,跳过交互、源码克隆和开发依赖,减少缓存压力 - 如果多 job 并发跑
composer install,注意repo/下的packages.json元数据可能被同时写,Composer 2.5+ 已优化此问题,但老版本建议串行或加锁
vcs 目录不清理、缓存路径没统一、锁文件没提交——这三个点漏掉任何一个,共享缓存都只是假节省。










