不会。composer global remove 只卸载指定包及其非共享依赖,不删除整个 ~/.composer/vendor/ 目录;需检查输出、刷新 shell 环境、清除命令缓存并验证二进制是否存在。

composer global remove 会删掉整个 vendor 目录吗?
不会。composer global remove 只卸载指定包及其依赖(在全局 vendor 中被其他包共享的依赖除外),不会清空整个 ~/.composer/vendor/。但很多人误以为它“没效果”,其实是没看清输出或没刷新 shell 环境。
- 执行后检查输出是否含
Removing package xxx,而非Nothing to uninstall - 卸载后需重新加载
$PATH,比如运行source ~/.bashrc或新开终端,否则旧命令仍能执行(只是指向已删的二进制) - 若包通过
composer global require --dev安装,remove同样适用,无需额外处理
卸载后命令还在,which xxx 还能查到路径?
说明系统缓存或 shell hash 未更新,不是 Composer 没卸载干净。Linux/macOS 的 shell 会缓存可执行文件路径,导致即使二进制已被删,xxx 仍能运行(然后报错或崩溃)。
- 先运行
hash -d xxx(Bash/Zsh)清除单个命令缓存,或hash -r清空全部 - 再用
which xxx和ls -l $(which xxx)确认文件是否存在;如果返回空或 “No such file”,说明已删净 - 常见陷阱:某些工具(如
laravel/installer)安装时会在~/.composer/vendor/bin/放软链接,而实际二进制在子目录里 ——remove会删软链接,但不会动子目录,这是正常行为
想彻底清理所有全局命令,只留 Composer 自身?
别直接删 ~/.composer/vendor,否则可能破坏 composer self-update 依赖(虽然概率低,但存在)。更稳妥的做法是分两步:先批量卸载,再验证残留。
- 列出当前所有全局包:
composer global show --installed - 逐个卸载(不推荐
rm -rf):composer global remove vendor/package-name - 清空 bin 目录残留(安全操作):
rm -f ~/.composer/vendor/bin/*—— 这只是删符号链接,不影响 vendor 源码 - 注意:Windows 用户对应路径是
%APPDATA%\Composer\vendor\bin\,且需用del或资源管理器手动删快捷方式
为什么 composer global remove laravel/installer 后 laravel 命令还能用?
因为 laravel/installer 默认安装的是 laravel 命令,但有些用户之前用 curl 下载过独立 PHAR 版本(比如 laravel new 脚本),那个二进制通常放在 /usr/local/bin/laravel 或 ~/bin/laravel,和 Composer 全局无关。
- 运行
which laravel查真实路径,再ls -l看是不是指向~/.composer/vendor/bin/laravel - 如果不是,那就是 PHAR 版残留,直接
rm $(which laravel)即可 - PHAR 版和 Composer 版不能共存,优先级取决于
$PATH顺序,容易引发版本混乱
which 和 ls -l,光看 Composer 输出会误判清理结果。










