composer 的缓存是全局共享的,--working-dir 参数对 clear-cache 无效,命令始终清理全局缓存目录(如 ~/.composer/cache/),与项目路径无关;vendor/ 是项目级产物,非缓存,应独立管理。

composer clear-cache --working-dir 只清项目关联缓存?不,它还是清全局的
很多人以为 composer clear-cache --working-dir=/path/to/project 能只删某个项目的缓存,实际不是。Composer 的缓存是全局共享的,--working-dir 参数在这里完全无效——命令照样清理 ~/.composer/cache/(Linux/macOS)或 %APPDATA%\Composer\Cache(Windows)下的全部内容,跟当前在哪个目录、指定哪个项目无关。
真正影响缓存读写的是 composer.json 和 composer.lock 的内容,而不是路径。同一个包版本的 .zip 文件,在所有项目里复用同一份缓存;删一次,所有项目下次装这个版本都会重下。
-
composer clear-cache --working-dir=xxx会静默忽略--working-dir,等价于直接运行composer clear-cache - 想验证:执行后看
du -sh $(composer config --global cache-dir),大小归零,和你在哪个项目目录下执行无关 - 如果你看到“Clearing cache (12.4 MiB)”输出,说明清的是全局缓存,不是某项目独占的部分
多项目场景下,真正需要按项目“隔离”缓存的,其实是 vendor/ 目录
误以为要“按项目清缓存”,往往是因为多个项目共用一个 vendor/ 或长期未清理导致磁盘告急。但 vendor/ 根本不属于 Composer 缓存,它是项目级安装产物,每个项目必须独立存在。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 常见错误:把多个项目的
vendor/都建在同一个父目录下,误以为“缓存混了”,其实是目录管理混乱 - 正确做法:每个项目保持自己独立的
vendor/,清理时只删当前项目下的rm -rf vendor,再composer install --no-dev - 若想节省空间又不想重下包:确保所有项目都用相同 PHP 版本 + 相同平台约束(如
"platform": {"php": "8.2"}),这样files/缓存才能被复用
想只清理某个项目“最近用过的包”缓存?没有内置命令,但可手动筛
Composer 不提供按项目、时间或包名过滤的缓存清理能力。但你可以基于缓存结构做轻量筛选:
-
~/.composer/cache/files/下文件名含vendor-name/package-name-version-hash.zip,可 grep 匹配旧项目用过的包名 -
~/.composer/cache/repo/下子目录名是 hash,对应packages.json快照;无法直接反推项目,但修改时间能帮你识别半年没更新的包源 - 危险操作:手动删前先停掉所有 PHP 进程(
pkill php),否则可能触发Corrupted cache file报错 - 更稳妥的做法:改用
composer install --prefer-dist --no-cache跳过缓存读取,强制走网络下载,避免污染已有缓存
CI/CD 或 Docker 构建中“伪按项目清理”的实用方案
在 GitHub Actions、GitLab CI 等环境里,你其实不需要“按项目清理缓存”,而是该避免缓存复用干扰构建结果。关键不是删什么,而是控制怎么用:
- 每次构建前加
composer clear-cache --no-interaction,防止上个 job 的缓存污染当前项目 - 但更推荐:构建阶段全程禁用缓存,用
--no-cache参数启动所有 composer 命令,比如composer install --no-cache --no-dev - Dockerfile 中不要依赖宿主机缓存,用
RUN mkdir -p /root/.composer/cache && composer config -g cache-dir /root/.composer/cache显式声明,再配合--cache-from分层缓存更可控 - 注意:某些插件(如
hirak/prestissimo)会在~/.composer/cache/prestissimo/单独存档,clear-cache不扫这里,得单独rm -rf ~/.composer/cache/prestissimo
真正容易被忽略的点是:所谓“项目专属缓存”根本不存在,Composer 设计就是全局复用。与其纠结怎么按项目清理,不如确认你的 cache-dir 没被镜像或环境变量意外覆盖,且 vcs/ 子目录没堆积大量 Git 裸仓库——后者单个就能吃掉 800 MB 并耗尽 inode,而 clear-cache 默认跳过它。










