直接用 composer global remove 卸载全局包,需在非项目目录执行;卸载后须手动清理 ~/.composer/vendor/bin 下残留二进制文件并运行 composer global dump-autoload 刷新自动加载映射。

直接用 composer global remove 就行,但得在对的地方运行
别在某个 PHP 项目的目录里敲这个命令——它会删你当前项目的依赖,不是全局的。真正的“全局”指 Composer 在你用户主目录下维护的一套独立环境,路径通常是 ~/.composer(Linux/macOS)或 %APPDATA%\Composer(Windows)。只要终端没进项目根目录,直接输命令就生效。
-
composer global remove laravel/installer:卸载 Laravel 安装器,自动从全局composer.json删除条目、清掉~/.composer/vendor/laravel/installer、重生成 autoload - 支持一次卸多个:
composer global remove phpunit/phpunit deployer/deployer - 如果提示 “command not found”,先确认
~/.composer/vendor/bin是否已加进PATH(常见漏配点)
卸载后命令还能用?八成是 vendor/bin 下的可执行文件没清干净
这是最常被忽略的一环:即使包文件夹删了,~/.composer/vendor/bin/laravel 这类二进制文件可能还留着,而你的 PATH 里又包含了这个目录,所以终端照样能执行旧命令。
- 手动检查残留:
ls -l ~/.composer/vendor/bin/ | grep laravel(macOS/Linux)或dir %APPDATA%\Composer\vendor\bin\laravel*(Windows) - 确认无用后直接删:
rm ~/.composer/vendor/bin/laravel(Linux/macOS)或del %APPDATA%\Composer\vendor\bin\laravel.bat(Windows) - 验证是否真失效:
which laravel(应无输出)或laravel --version(应报command not found)
为什么有时 composer global show 看不到包,但类还是加载失败?
因为全局 autoloader(~/.composer/vendor/autoload.php)不会自动更新。它是一次性生成的映射表,删了 vendor 文件夹但没刷新 autoload,PHP 运行时仍会按旧路径去找类,结果抛出 Fatal error: Class 'Laravel\Installer\Console\InstallCommand' not found。
- 必须补上这步:
composer global dump-autoload - 验证 autoload 是否清理干净:打开
~/.composer/vendor/composer/autoload_psr4.php,搜索'Laravel\\Installer\\',确认对应条目已消失 - 不执行这步,等于卸载了一半——磁盘文件没了,但 PHP 还在“幻读”
不想用 remove?手动删 vendor 目录也行,但要更小心
有些老版本 Composer 或特殊配置下 global remove 不可用,这时可以进全局 vendor 目录手动删包,但必须同步处理三处,缺一不可:
- 删包目录:
rm -rf ~/.composer/vendor/laravel/installer - 删 bin 链接:
rm ~/.composer/vendor/bin/laravel - 强制重建 autoload:
composer global dump-autoload
别只盯着 vendor 文件夹看空了就以为完事——PATH 里的二进制和 autoload 里的映射才是让问题反复出现的两个隐形开关。










