composer global require安装的命令找不到,根本原因是%appdata%\composer\vendor\bin(windows)或~/.composer/vendor/bin(linux/macos)未加入系统path环境变量,需手动添加并重启终端验证。

工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
composer global require 不是“系统级安装”,只是用户级全局
它不会把命令装进 /usr/local/bin 或 C:\Windows\System32 这类所有用户都能访问的路径,也不会要求 sudo 或管理员权限。实际安装位置是当前用户的家目录下:~/.composer/vendor/(Linux/macOS)或 %APPDATA%\Composer\vendor\(Windows)。这意味着:
- 只有你当前这个 shell 用户能用这些命令
-
sudo -i、su切换用户后,laravel就会报command not found - CI/CD 用
www-data或jenkins用户跑脚本时,即使你本地装过phpstan,也会找不到命令
PATH 都绑定在你自己的用户环境里,不是操作系统层面的“系统级”。
为什么装完 laravel 还提示 command not found
因为 composer global require laravel/installer 只做了两件事:解压包到 ~/.composer/vendor/,再把 laravel 可执行文件软链接进 ~/.composer/vendor/bin/。它**不修改 PATH,也不改 shell 配置文件**。
所以你敲 laravel,shell 根本没去那个目录找——它只查 $PATH 里列出的路径。
常见错误包括:
- 以为“装完就能用”,没配
PATH - 改了
COMPOSER_HOME(比如设成/opt/composer),但PATH还指向默认路径 - macOS Catalina+ 用 zsh,却往
~/.bash_profile里写export PATH,结果不生效 - Windows 加了
%APPDATA%\Composer\bin(少了个\vendor),路径错误
怎么确认并正确配置全局 bin 路径
别靠记忆或文档硬背路径,尤其当你改过 COMPOSER_HOME。直接问 Composer:
- 查真实 bin 路径:
composer global config bin-dir --absolute(输出类似/home/alex/.composer/vendor/bin) - 查全局根目录:
composer config --global home --absolute,再拼上/vendor/bin
- Linux/macOS:把
export PATH="$HOME/.composer/vendor/bin:$PATH"加到~/.zshrc(zsh)或~/.bash_profile(bash),再运行source ~/.zshrc - Windows:在「系统属性 → 高级 → 环境变量」中,**用户变量**的
Path新增该路径,**必须新开 CMD/PowerShell 窗口**才生效
- Linux/macOS:
echo $PATH | grep composer看是否含该路径;再which laravel - Windows:
where laravel或直接laravel --version
容易被忽略的权限和兼容性细节
最常踩的坑不是命令写错,而是环境状态不对:
- 千万别用
sudo composer global require——会导致~/.composer归属变成root,后续所有全局操作都因权限失败;修复方法:chown -R $USER ~/.composer -
--dev参数在全局安装里完全无效,composer global require --dev phpunit/phpunit和不加一样 -
composer global exec是临时补救方案(如composer global exec phpunit --version),但它不能替代 PATH 配置,交互式工具(如psysh)可能卡住 - 包名必须精确匹配 Packagist 上的命名,比如 Deployer 是
deployer/deployer,不是deployer或deployer_composer
composer global require 这条命令本身,而是你手动把它放进 PATH 的那一步。漏掉这步,等于只建了仓库,没修通往仓库的路。










