vendor/bin/xxx 找不到命令的主因是包未声明 bin 字段、vendor/bin 不在 $path 中、手动删除后未重装,或 bin 脚本权限/路径/autoloader 配置异常。

Composer 安装带二进制文件的包,关键不在 composer install 本身,而在于包的 bin 字段是否被正确声明、是否被 Composer 自动软链到 vendor/bin/,以及你的 $PATH 是否包含该路径。
为什么 vendor/bin/xxx 找不到命令?
常见现象:包已成功 require,vendor/bin/ 下却没生成对应可执行文件,或执行时报 command not found。
- 包的
composer.json没定义bin字段(例如"bin": ["phpunit", "larastan"]),Composer 就不会创建软链接 -
vendor/bin/不在系统$PATH中(尤其 Windows 或某些 CI 环境) - 你手动删过
vendor/bin/,但没运行composer install或composer dump-autoload—— 这个目录是 Composer 自动管理的,不建议手改 - 包使用了相对路径的 bin 脚本(如
#!/usr/bin/env php正确,但写成#!/usr/bin/php可能在某些系统失效)
bin 字段怎么写才生效?
它必须是数组,每个元素是相对于包根目录的可执行脚本路径(通常为 PHP 文件),且该文件需有可执行权限(Unix)或带 shebang(#!/usr/bin/env php)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
例如一个包的 composer.json:
"bin": [ "bin/mytool", "src/Commands/cli.php" ]
-
bin/mytool必须存在,且第一行是#!/usr/bin/env php - Windows 用户不用操心 chmod,Composer 会自动处理;Linux/macOS 下若脚本无执行权限,
composer install会尝试加+x,但失败时不会报错,只静默跳过链接 - 路径支持通配符吗?不支持。
"bin": ["bin/*"]无效,必须列明具体文件
如何确认 bin 是否已正确注册并可用?
别猜,用命令验证:
- 运行
composer show vendor/package-name,看输出里是否有bin行,例如:bin: bin/phpunit - 检查
vendor/bin/下是否存在对应软链接:ls -l vendor/bin/mytool(应指向../vendor/vendor/package-name/bin/mytool) - 临时把
vendor/bin加进当前 shell 的$PATH测试:export PATH="./vendor/bin:$PATH",再运行mytool --version - 如果仍不行,直接调用全路径测试:
php vendor/vendor/package-name/bin/mytool --version—— 若这个能跑,说明问题纯属 PATH 或软链缺失
真正容易被忽略的是:有些包(比如 phpstan/phpstan)的 bin 脚本依赖自身 autoloader,而它的 autoload-dev 配置可能没加载——此时即使软链存在,运行也会报 Class not found。这种情况下,得确认该包是否被安装在 require(而非 require-dev)里,或者是否启用了 --no-dev 模式。










