composer clear-cache 不足以解决插件安装失败,因其仅清理三处缓存,而插件代码、注册表、私有缓存及配置残留需手动清除,并配合 --no-cache、--update-with-dependencies 和 composer global dump-autoload。

插件安装失败时,composer clear-cache 通常不够用
因为 Composer 插件(如 hirak/prestissimo、composer/installers 或私有插件)可能在 ~/.composer/cache/ 外另建缓存目录,或把配置/元数据写进 ~/.composer/vendor/ 和 ~/.composer/plugins/,而 composer clear-cache 只清 cache/files/、cache/repo/、cache/vcs/ 这三处,对插件私有缓存完全无感。
常见现象包括:
-
composer global require vendor/plugin后执行失败,报Class not found或Plugin installation failed - 插件已出现在
~/.composer/vendor/,但composer install时不触发其逻辑 - 换 PHP 版本后插件命令消失(如
composer dump-autoload不再生效)
先确认插件是否真被加载,而不是缓存问题
运行 composer --version -v,看输出末尾是否有类似 Loaded plugins: vendor/plugin-name 的行。没有?说明插件根本没注册成功,不是缓存损坏,而是:
- 插件的
composer.json缺"type": "composer-plugin" - 插件未声明
"extra": {"class": "Vendor\Plugin\Class"} - PHP 版本不兼容(比如插件要求 PHP 8.2+,你用的是 8.1)
-
~/.composer/autoload.php没被重新生成(需手动跑composer global dump-autoload)
手动清理插件相关残留路径
插件安装失败后,仅靠 composer clear-cache 无法覆盖以下关键位置,必须手动删:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
~/.composer/vendor/:插件代码本体所在,删它等于卸载插件 -
~/.composer/plugins/(旧版 Composer)或~/.composer/vendor/composer/installed.json(新版):插件注册表,损坏会导致“已装却未启用” -
~/.composer/cache/prestissimo/(若用过hirak/prestissimo):该插件会单独建缓存,clear-cache完全不碰它 -
~/.composer/config.json中的"config": {"fxp-asset": {...}}等废弃插件配置项(它们可能干扰新插件初始化)
Linux/macOS 下可一次性清理:
rm -rf ~/.composer/vendor/ ~/.composer/plugins/ ~/.composer/cache/prestissimo/ composer global dump-autoload
重装插件时必须加 --no-cache 和 --update-with-dependencies
插件依赖链比普通包更脆弱,尤其当它自身又 require 其他插件时,Composer 默认会复用旧缓存中的元数据,导致版本解析错乱。正确做法是:
- 先确保
~/.composer/vendor/为空(或至少不含冲突插件) - 运行
composer global require vendor/plugin --no-cache --update-with-dependencies - 若仍失败,临时禁用所有插件验证:加
-n参数,即composer -n global require ...,排除插件间互相干扰 - Windows 用户注意:
%APPDATA%Composerendor和%LOCALAPPDATA%ComposerCacheprestissimo都要手动删,PowerShell 中~不自动展开
最易被忽略的一点:插件类名变更(比如从 PluginV1 改成 PluginV2)后,旧 autoload 映射仍留在 ~/.composer/vendor/autoload.php 里,不手动 dump-autoload 就永远找不到新类。










