缓存没命中不是镜像配置问题,而是Composer未读取本地缓存;需确认cache-dir路径存在且可读写、无COMPOSER_CACHE_DIR干扰、无项目级禁用、未启用--prefer-source、lock文件dist字段有效,并通过-v日志验证“Loading from cache”是否出现。

缓存没命中,不是镜像没配好,而是 Composer 没读它
Composer 优先走本地缓存是默认行为,但前提是它能确认缓存文件完整、路径正确、且没被绕过。很多人配了阿里云镜像却仍看到 Downloading 日志,其实是缓存压根没被加载——镜像只管“从哪拉”,缓存才决定“要不要拉”。
- 运行
composer config --global cache-dir看输出路径,再执行ls -ld $(composer config --global cache-dir)确认目录存在且当前用户有读写权限 - 如果输出是
/dev/null或路径不可写,缓存就形同虚设;Docker 或 CI 中常见/tmp被清理或挂载缺失 -
COMPOSER_CACHE_DIR环境变量优先级高于配置项,检查是否被设为/dev/null或空值:echo $COMPOSER_CACHE_DIR - 项目级
composer.json里写了"config": { "cache-dir": false }会直接禁用缓存,比全局配置还狠
为什么 composer install 还在下载,而不是“Loading from cache”?
日志里没出现 Loading from cache 就说明缓存没生效,常见原因不是网络慢,而是缓存策略被干扰。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 用了
--prefer-source(比如开发时调试 fork),这会让 Composer 忽略 dist 缓存,直接走 Git 克隆 - 某些包在
composer.lock里记录的是source类型,哪怕你加了--prefer-dist,lock 文件优先级更高;得删掉 lock 文件重生成,或手动改dist字段 - 私有包没在
repositories里正确定义,Composer 根本不把它当合法包处理,自然不会存进缓存 - 镜像源返回的
dist.url是 404(比如同步延迟),Composer 会 fallback 到 source 或报错,而非退回到本地缓存
composer clear-cache 后反而更慢?那是缓存重建阶段
首次 composer install 在清缓存后必然触发下载,这不是失败,是缓存重建的必经过程。关键看第二次是否跳过。
- 执行
composer install -v,重点找含Loading from cache的行;出现Downloading xxx.zip from cache才算真正复用 - 如果第二次仍
Downloading https://...,说明缓存路径不对、权限不足,或包本身没 dist 段(composer show vendor/package查dist是否存在且url非空) - 别手动删
~/.composer/cache/files/下的 zip,composer clear-cache已足够;手删容易导致 hash 不匹配,offline 模式直接失败
想彻底离线安装?--offline 不是开关,是校验器
--offline 不会让 Composer “自动选缓存”,而是强制它只从 ~/.composer/cache/ 和 vendor/ 里找包,找不到就报错。它不宽容,也不降级。
- 必须提前联网跑过
composer install --prefer-dist,确保所有依赖的 exact version + shasum 都已落盘 - 检查
composer.lock里每个包的dist.shasum,再对应到~/.composer/cache/files/[vendor]/[package]/[shasum].zip是否存在且非空 - 私有包若用
path类型,--offline可用,但路径必须真实存在;若用composer类型仓库,得提前composer config --global repositories.xxx注册好

















