缓存失效指Composer固执复用旧数据,如报410 Gone错误时clear-cache无效,因composer.lock硬编码的dist URL已下线;正确做法是composer update --lock强制重解析依赖并更新URL。

缓存失效不是“感觉慢了”,而是 Composer 明明该拉新包、换镜像、读新版本,却固执地复用旧数据——这时候必须强制刷新,否则所有操作都在原地打转。
报 410 Gone 错误时,clear-cache 完全无效
错误形如 Failed to download vendor/package: The "https://xxx.com/package-1.2.3.zip" file could not be downloaded (HTTP/2 410),说明 composer.lock 里硬编码的 dist URL 已被服务端下线。缓存里有没有那个 ZIP 文件根本不重要,因为 Composer 根本不会去查缓存,它会直连那个已失效链接。
- 运行
composer clear-cache不会改composer.lock里的 URL,错误照旧 - 换镜像源也无效——只要 lock 文件没更新,Composer 就不查镜像,只执行硬编码地址
- 正确做法是
composer update --lock(不带包名),强制重解析全部依赖并生成新dist.url - 执行前先检查私有源是否还存活:
composer config repos,删掉已失效的"type": "package"条目
换镜像后仍从 repo.packagist.org 拉包
你已执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,但 composer install 日志里还是出现 repo.packagist.org ——这说明缓存中的元数据(~/.composer/cache/repo/ 下的 packages.json)还没刷新,Composer 仍在按旧快照找包。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer clear-cache是必须步骤,否则新镜像配置等于没生效 - 确认是否被项目级配置覆盖:
composer config repo.packagist输出应与全局一致;若不一致,需删掉composer.json中的repositories块或显式重设 - 清完缓存后仍失败?立刻验证镜像可用性:
curl -I https://mirrors.aliyun.com/composer/packages.json,必须秒回HTTP/2 200
反复出现 corrupted archive 或 checksum mismatch
这类错误基本锁定在 ~/.composer/cache/files/ 下某个中断下载的 ZIP:写了一半断电、磁盘满、杀毒软件拦截,都会导致校验失败。Composer 尝试解压时崩溃,又不报具体文件名,只卡在 “Failed to extract”。
-
composer clear-cache能清掉损坏 ZIP,但若缓存目录属主错位(比如曾用sudo composer),它可能根本删不干净 - 先查归属:
ls -ld $(composer config --global cache-dir),非当前用户则运行sudo chown -R $USER:$USER $(composer config --global cache-dir) - 针对单个包快速修复:
rm -rf ~/.composer/cache/files/vendor-name/package-name(Windows 用rd /s/q "%APPDATA%\Composer\Cache\files\vendor-name\package-name") - CI/CD 环境中直接跳过缓存更可靠:
composer install --no-cache --prefer-dist
删了 vendor 但 install 还是不拉新包
你以为删掉 vendor/ 就能重来,结果 composer install 秒装完,版本和之前一模一样——这是因为 composer.lock 和本地缓存都还在,Composer 只是把缓存里已解压好的文件原样复制过去。
- 仅删
vendor/≠ 重装,只是“复原” - 仅删
composer.lock也不行:下次install会按composer.json重新生成 lock,但依然优先复用缓存中的 ZIP - 真正强制重装必须三步齐备:
rm -rf vendor→rm composer.lock→composer install --no-cache -
--no-cache不是“清缓存”,是告诉 Composer “这次别查~/.composer/cache/,老老实实发 HTTP 请求”;它和composer clear-cache是互补关系,不是替代关系
缓存本身是优化手段,不是故障根源。最常被忽略的是:缓存目录归属错、PHP zlib 扩展缺失、镜像源实际不可达——这些地方出问题,清一百次缓存也没用。

















