Composer全局安装的包存放在COMPOSER_HOME环境变量指定的路径下,未设置时默认为~/.composer(Linux/macOS)或%APPDATA%\Composer(Windows),其源码位于vendor/子目录,可执行文件链接或复制到vendor/bin/目录。

Composer全局安装的包实际存放在哪里?
Composer全局安装的包(即执行 composer global require xxx 后的包)默认不放在项目目录,而是集中存放在用户主目录下的一个特定路径中。这个路径由 COMPOSER_HOME 环境变量决定;未设置时,Composer 会 fallback 到:~/.composer(Linux/macOS)或 %APPDATA%\Composer(Windows)。
关键点是:全局包的源码实际解压在 vendor/ 子目录下,而可执行脚本(如 phpunit、laravel)会被软链接(Linux/macOS)或复制(Windows)到 vendor/bin/ 目录 —— 这个 vendor/bin/ 就是你需要加入 $PATH 的地方。
如何确认当前生效的全局路径?
运行以下命令可直接输出 Composer 当前使用的全局配置根目录:
composer global config home
它返回的是类似 /home/yourname/.composer 或 C:\Users\YourName\AppData\Roaming\Composer 的路径。
要查看全局已安装的包及其位置,可运行:
composer global show --path
该命令会逐行显示每个全局包对应的完整物理路径,例如:laravel/installer /home/yourname/.composer/vendor/laravel/installer
为什么 laravel 命令能直接运行?
因为 Composer 在全局安装含 bin 字段的包(如 laravel/installer)后,会把其声明的可执行文件(如 laravel)链接到:~/.composer/vendor/bin/(Linux/macOS)或 %APPDATA%\Composer\vendor\bin\(Windows)。
但前提是:你必须把该 vendor/bin/ 路径手动添加进系统 $PATH,否则 shell 找不到命令。常见疏漏包括:
- 只加了
~/.composer,没加~/.composer/vendor/bin - 修改了
~/.bashrc但忘了source ~/.bashrc或新开终端 - macOS Catalina+ 默认用 zsh,却把 PATH 加在
~/.bash_profile里 - Windows 用户没重启终端或 PowerShell,导致环境变量未刷新
能否自定义全局安装路径?
可以,但需提前设置 COMPOSER_HOME 环境变量,且必须在首次运行 composer global 前完成。例如:
export COMPOSER_HOME="$HOME/.config/composer"
之后所有全局操作(global require、global show)都会基于该路径。注意:
– 已存在的 ~/.composer 不会自动迁移
– composer global config home 会如实反映该变量值
– vendor/bin 位置也随之变为 $COMPOSER_HOME/vendor/bin
如果你中途改了 COMPOSER_HOME,旧全局包不会失效,但新安装的包将落在新路径,容易造成命令混乱 —— 这是最常被忽略的隐性陷阱。










