composer全局命令找不到是因为~/.composer/vendor/bin未加入path环境变量,需将其添加至~/.bashrc或~/.zshrc并source生效。

为什么 composer global require 安装的命令找不到?
因为 Composer 默认把全局二进制文件放在 ~/.composer/vendor/bin/,但这个路径不在你的 $PATH 里。系统执行命令时根本不会去那里找,所以即使安装成功,终端也报 command not found。
常见错误现象:composer global require laravel/installer 成功,但运行 laravel 报错;或者 which laravel 返回空。
- 确认安装位置:运行
composer global config bin-dir --absolute,输出通常是/home/username/.composer/vendor/bin - 检查当前
$PATH:运行echo $PATH,看是否包含该路径 - 临时验证:直接运行
~/.composer/vendor/bin/laravel,如果能跑,说明只是 PATH 没配
如何把 ~/.composer/vendor/bin 加进 PATH?
不能只改一次 shell 命令行,得写进 shell 初始化文件,否则新开终端又失效。用户级配置优先用 ~/.bashrc(bash)或 ~/.zshrc(zsh),别碰 /etc/profile——你没 root 权限。
- 先查你用的 shell:
echo $SHELL,大概率是/bin/bash或/bin/zsh - 往对应文件末尾加一行:
export PATH="$HOME/.composer/vendor/bin:$PATH" - 立即生效:
source ~/.bashrc或source ~/.zshrc - 验证:
echo $PATH看开头是否出现/home/username/.composer/vendor/bin
composer global require 和本地 require 的区别在哪?
全局安装是给当前用户“装工具”,比如 laravel、phpunit、deployer 这类 CLI 工具;本地安装是给某个 PHP 项目装依赖,生成在项目下的 vendor/ 里,跟 autoload.php 绑定。
- 全局命令必须放
bin目录且有可执行权限,Composer 会自动软链或复制到~/.composer/vendor/bin/ - 全局包的 autoloader 是独立的,不参与任何项目的
composer.json自动加载 - 升级风险:全局包更新可能破坏旧项目依赖(比如全局 phpunit 版本和项目要求冲突),建议优先用本地安装 +
vendor/bin/phpunit
遇到 “Permission denied” 或 “Cannot create cache directory” 怎么办?
Composer 在无 root 环境下默认缓存和配置都走用户目录,但有时家目录权限太严(比如被管理员设为 700 且 group/other 无读写),会导致 composer global 写失败或缓存初始化卡住。
- 检查
~/.composer/权限:ls -ld ~/.composer,确保你是 owner,且至少有drwxr-xr-x(即755) - 修复权限:
chmod 755 ~/.composer,再试composer global require - 如果仍报 cache 错误,手动指定缓存路径:
composer config --global cache-dir ~/.composer/cache - 注意:不要用
sudo composer—— 它会以 root 身份操作,生成的文件归 root 所有,后续普通用户完全无法读写
composer global require 装的命令就能直接用了,但得记住:所有全局二进制都依赖那个 ~/.composer/vendor/bin 路径,一旦你删了 .composer 目录,或者换了 shell 配置没同步,就又找不到了。










