vendor/bin 下命令直接执行报错是因为该路径未加入系统 $path,shell 无法定位;临时用 ./vendor/bin/cmd 运行,长期建议仅在项目目录下将 vendor/bin 加入 $path,或使用 composer exec(自动识别 vendor/bin 并执行)。

vendor/bin 下的命令为什么直接敲名字会报错
因为 vendor/bin 不在系统 $PATH 里,Shell 找不到可执行文件。不是 Composer 问题,是环境路径问题。你执行 phpunit 或 phpcs 时,Shell 默认只查 /usr/bin、/usr/local/bin 这些位置。
- 临时解决:用相对路径运行,比如
./vendor/bin/phpunit(注意开头的./) - 长期方案:把
vendor/bin加进$PATH,但只建议在当前项目目录下生效,避免污染全局 - 加之前先确认路径是否真实存在——有些包安装后不生成二进制文件,或用了
bin-compat模式(比如 Laravel 的artisan是 PHP 脚本,没放vendor/bin)
Composer 自带的 exec 命令怎么用才不踩坑
composer exec 是专为这个场景设计的,它会自动识别 vendor/bin 并执行,不用手动配 PATH。但它不是万能的:默认只找当前目录下的 vendor/bin,且要求目标命令是可执行文件(有 +x 权限),不是纯 PHP 脚本。
- 基本用法:
composer exec phpunit,等价于./vendor/bin/phpunit - 传参要写在命令名后面:
composer exec phpunit -- --filter=testSomething,中间两个--是分隔符,不能少 - 如果项目用了 workspace 或多 vendor 目录(比如 Lerna + Composer 混合),
composer exec会失效,得切到对应子包目录再运行 - 某些命令(如
larastan)依赖当前工作目录是 Laravel 根目录,composer exec不会自动 cd,得自己cd进去再 exec
Windows 上 vendor/bin 命令为啥总提示“不是内部或外部命令”
Windows 默认不识别 Unix 风格的 shell 脚本(.sh 或无扩展名但带 shebang 的文件)。Composer 在 Windows 上会额外生成 .bat 包装器,但前提是安装时启用了 bin-compat(默认开启),且目标工具本身支持 Windows。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 检查
vendor/bin下有没有同名的.bat文件,比如phpunit.bat;没有的话说明包没提供 Windows 兼容入口 - 别用 Git Bash 直接跑
phpunit——它会尝试执行 Unix 脚本,但 PHP 解释器路径可能不对;优先用 CMD 或 PowerShell +composer exec - 某些工具(如
psalm)在 Windows 上必须用php psalm显式调用,vendor/bin/psalm只是个包装脚本,Windows 不认它的 shebang
如何判断一个命令到底是不是由 Composer 安装进 vendor/bin 的
不能光看 vendor/bin 目录里有没有文件——有些是软链接,有些是 Composer 自动生成的代理脚本,真正逻辑可能在别的地方。关键看 composer.json 的 bin 字段和包自身的声明。
- 运行
composer show vendor/package-name,看输出里有没有Bin:行,例如Bin: vendor/bin/phpcs - 进
vendor/vendor-name/package-name目录,查它的composer.json,确认"bin"键是否存在且指向有效文件 - 用
ls -l vendor/bin/command-name看是不是软链接:如果是,源文件路径可能不在 vendor 下(比如指向全局安装的phpstan),这时删掉vendor重装也未必能修复 - 有些命令(如
symfonyCLI)是独立安装的,即使出现在vendor/bin里,也是 Composer 下载的独立二进制,跟 PHP 依赖无关
事情说清了就结束










