执行composer install --prefer-dist时,若终端跳过“downloading”、出现“writing ... into cache”或直接解压,则缓存命中;若反复显示“downloading https://...”,则未生效,常见原因包括cache-dir设为/dev/null、项目配置禁用缓存、ci中误加--no-cache或镜像元数据残留。

怎么确认 Composer 正在用本地缓存,而不是每次都重下?
看终端输出最直接:执行 composer install --prefer-dist 时,如果跳过 Downloading 行、出现 Writing .../monolog-monolog-xxx.zip into cache 或 Using version ^2.10 for monolog/monolog 后直接解压,说明缓存命中;如果反复出现 Downloading https://mirrors.aliyun.com/composer/...,大概率缓存没生效。
常见卡点:
-
cache-dir被设成/dev/null或只读路径(比如挂载卷权限不对) - 项目级
composer.json里写了"config": { "cache-dir": false },直接关了缓存 - CI 脚本里误加了
--no-cache参数 - 用了
COMPOSER_CACHE_DIR环境变量但路径不存在或不可写
换国内镜像源后还报 Could not find package?先清 repo/ 子目录
镜像源切换(比如从腾讯云切到阿里云)后,repo/ 目录里可能还存着旧镜像的 packages.json 快照,Composer 会优先读它,导致找不到新镜像里已同步的包版本。
这不是镜像配置没生效,而是元数据残留。此时必须清理:composer clear-cache —— 它会删掉 cache-dir 下的 repo/、files/、vcs/ 三个子目录;
但更精准的做法是只清元数据:rm -rf $(composer config --global cache-dir)/repo
注意:clear-cache 不会动 vendor/、composer.lock 或 PHP OPcache,放心执行。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
离线部署要的是 files/,不是整个 cache-dir
很多人把 ~/.composer/cache 整个复制到内网机器,结果 composer install --prefer-dist 仍报错 Could not find package——因为只有 files/ 子目录下的 .zip 包才是离线安装真正读取的实体,repo/ 和 vcs/ 在无网时完全失效。
正确做法:
- 联网机上先设
composer config --global cache-files-dir /path/to/offline-files - 再跑
composer install --no-autoloader --no-scripts --prefer-dist(触发下载并落盘到files/) - 检查目标路径是否生成类似
monolog/monolog/2.10.0.0/monolog-monolog-6a8c4b5.zip的结构 - 内网机上同样配
cache-files-dir,且建议先composer config --global --unset cache-dir避免冲突
vcs/ 目录才是磁盘和 inode 杀手,该禁就禁
~/.composer/cache/vcs/ 存的是 Git 裸仓库,单个包克隆下来就占 300–800 MB,还吃大量 inode。而 composer clear-cache 默认不清理它,df -i 显示 inode 耗尽却查不到原因,八成是这里。
一劳永逸的方案:composer config --global cache.vcs false
这样所有 Git 包强制走 --prefer-dist,不再克隆裸库。
已存在的 vcs/ 可安全手动删:
Linux/macOS:rm -rf $(composer config --global cache-dir)/vcs
Windows:rd /s /q "%APPDATA%\Composer\Cache\vcs"
别指望镜像或代理解决这个问题——它跟网络层无关,纯属本地缓存策略失控。










