composer无法通过包管理器一键卸载,需手动删除composer.phar、~/.composer目录及shell配置中的alias或path注入,windows还需清理composersetup残留和注册表项。

Composer 不能用 apt remove 或 brew uninstall 一键卸载干净——它没有标准包管理器意义上的“安装记录”,所谓“卸载”其实是手动清理几个关键文件和路径。
删掉全局安装的 composer.phar 文件
Composer 本质就是一个 PHP 可执行脚本,全局使用时通常被放在 /usr/local/bin/composer(Linux/macOS)或 C:\ProgramData\ComposerSetup\bin\composer.bat(Windows)。但这个文件只是个软链接或包装脚本,真正要删的是它指向的 composer.phar。
- 先查真实位置:
which composer(macOS/Linux)或where composer(Windows) - 如果输出是
/usr/local/bin/composer,再看它指向哪:ls -l /usr/local/bin/composer - 常见真实路径:/usr/local/bin/composer.phar、~/.local/bin/composer.phar、/opt/composer/composer.phar
- 确认后直接删:
rm /path/to/composer.phar
别只删 composer 命令本身——那可能只是个 shell wrapper,删了也还会从别处重新加载。
清除 Composer 的全局配置和缓存目录
Composer 运行时会生成配置、缓存、全局依赖包,它们不会随 composer.phar 删除而消失,下次重装会复用旧状态,导致行为异常。
- 配置文件默认在:
~/.composer/config.json(Linux/macOS)或%APPDATA%\Composer\config.json(Windows) - 缓存目录:
~/.composer/cache/或%APPDATA%\Composer\Cache\ - 全局 vendor 目录(如果你用过
composer global require):~/.composer/vendor/ - 全部删掉:
rm -rf ~/.composer(macOS/Linux),或手动删 Windows 下对应文件夹
注意:~/.composer 里可能有你手动加的 auth.json(含私库 token),删前确认是否需要备份。
检查并清理 shell 配置里的 alias 或 PATH 注入
很多人为了方便,会在 ~/.bashrc、~/.zshrc 或 PowerShell profile 里加过 alias 或 PATH,比如:
alias composer='php /path/to/composer.phar'
或者:
export PATH="$HOME/bin:$PATH"
这类配置会让终端“假装”还有 Composer,实际却找不到可执行文件,报错 command not found: php 或直接静默失败。
- 搜一下:
grep -n "composer" ~/.bashrc ~/.zshrc 2>/dev/null - 打开对应文件,删掉所有含
composer的alias、function、export PATH行 - 改完记得重载:
source ~/.zshrc(或对应 shell 配置)
否则你会反复遇到「明明删了为啥还提示 command not found」这种问题。
Windows 用户额外注意:ComposerSetup 安装器残留
用官方 Composer-Setup.exe 安装的用户,控制面板里能看到“Composer”条目,但卸载后仍会留下:
-
C:\ProgramData\ComposerSetup\(含composer.phar和composer.bat) -
C:\Users\{user}\AppData\Roaming\Composer\(等价于 %APPDATA%) - 注册表项:
HKEY_CURRENT_USER\Software\Composer(一般不用动,除非后续重装报冲突)
建议手动进资源管理器把这两个路径删干净,别只信控制面板的“卸载”按钮。
最常被忽略的其实是 shell 配置里的 alias 和 ~/.composer 下的 auth.json——前者让卸载失效,后者可能泄露凭据。删完运行 composer --version 报 command not found,且 ls -la ~/.composer 返回 no such file,才算真正清空。










