根本原因是系统PATH未包含Composer全局bin目录;它仅将包装入~/.composer/vendor(Linux/macOS)或%APPDATA%\Composer\vendor(Windows)并链接脚本,不自动配置PATH,需手动添加对应vendor/bin路径并重载终端。

composer global require 装完命令还是 command not found
根本原因不是安装失败,而是系统 PATH 没包含 Composer 全局 bin 目录。composer global require 只做两件事:把包放进 ~/.composer/vendor(Linux/macOS)或 %APPDATA%\Composer\vendor(Windows),再把 bin 字段声明的脚本链接到对应 vendor/bin 下——它不改 PATH,shell 就永远找不到。
常见错误现象:
-
which laravel或where laravel无输出 -
echo $PATH(macOS/Linux)或echo %PATH%(Windows)里没出现~/.composer/vendor/bin或%APPDATA%\Composer\vendor\bin - 误以为
composer global是独立命令,输完直接报错
实操建议:
- 先确认真实 bin 路径:
composer global config bin-dir --absolute - Linux/macOS:根据 shell 类型(
zsh用户改~/.zshrc,bash用户改~/.bash_profile),末尾加export PATH="$HOME/.composer/vendor/bin:$PATH",然后运行source ~/.zshrc - Windows:在「环境变量」→「用户变量」→「Path」中新增完整路径,例如
C:\Users\Alice\AppData\Roaming\Composer\vendor\bin(不能写%APPDATA%) - 改完必须新开终端,旧窗口不会重载
PATH
为什么 composer 命令本身也提示 command not found
这是更底层的 PATH 问题:连 composer 命令都找不到,说明 Composer 主程序没进系统路径。它和全局包是两个独立路径,别混为一谈。
典型表现:
-
which composer无输出 - 下载了
composer.phar但没设权限或没建软链 - Windows 上用图形安装器却没勾选 “Add to PATH”,或勾选了但因 UAC/PowerShell 执行策略失效
实操建议:
- Linux/macOS:检查
/usr/local/bin/composer是否存在;若只有composer.phar,运行chmod +x /usr/local/bin/composer.phar,再建软链:sudo ln -s /usr/local/bin/composer.phar /usr/local/bin/composer - Windows:打开「系统属性 → 高级 → 环境变量」,在「系统变量」的
Path中新增C:\ProgramData\ComposerSetup\bin(图形安装器默认路径)或你自定义的存放路径 - PowerShell 用户执行
Get-ExecutionPolicy,若返回Restricted,需运行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
bin-dir 配置改了但新命令还是不出现在终端里
bin-dir 控制二进制文件“放哪”,不负责“怎么找”。哪怕你把 phpunit 放进了项目根目录下的 bin/,只要这个 bin/ 不在 PATH 里,终端照样不认识。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
容易踩的坑:
- 改了
composer.json里的"config": {"bin-dir": "bin"},但没删掉旧的vendor/bin,导致旧文件残留、新文件生成但被忽略 - Windows 上用了反斜杠
\或带空格路径(如./my tools/bin),导致生成的 shell wrapper 解析失败 - 在非项目根目录下执行
composer config bin-dir,结果写进了全局配置,对当前项目无效
实操建议:
- 清空旧目录:
rm -rf vendor/bin && rm -rf bin(Linux/macOS)或手动删除对应文件夹(Windows) - 确保
bin目录存在且权限正常:mkdir -p bin,再运行composer install - 临时测试:Linux/macOS 运行
export PATH="$(pwd)/bin:$PATH",Windows CMD 运行set PATH=%CD%\bin;%PATH% - 长期生效:把绝对路径加入 shell 配置,例如
export PATH="/your/project/path/bin:$PATH"
composer global exec 是什么,什么时候该用它
composer global exec 是 Composer ≥ 2.5 提供的绕过 PATH 的临时调用方式,本质是让 Composer 自己去 ~/.composer/vendor/bin 找并执行对应脚本,不依赖系统环境变量。
适用场景:
- PATH 暂时配不成功,又急需跑一次
laravel new blog - CI/CD 流水线里避免环境差异,保证命令始终从已知路径调用
- 想验证某个全局包是否真装好了,而不受本地 shell 配置干扰
示例:
composer global exec laravel new blog composer global exec php-cs-fixer fix src/
注意:composer global exec 不会自动加载项目级 composer.json 的配置,也不影响当前 shell 的 PATH,它只是“代劳执行”——配好 PATH 仍是长期稳定方案,exec 只是应急手段。
真正复杂的地方在于:PATH 是分层的(系统级、用户级、shell 配置级、终端会话级),改错一层就白忙;而 composer global 和主 composer 命令的路径完全独立,得分别处理。

















