vendor/bin是Composer自动生成的目录,用于存放项目依赖包提供的可执行脚本;当包的composer.json中定义了"bin"字段时,Composer在安装该包时会将其指定的可执行文件链接或复制到vendor/bin下,便于通过./vendor/bin/command方式在本地调用PHP工具,如phpunit、psysh等,无需全局安装。

当你运行 composer install 或 composer update 时,Composer 会根据项目依赖自动创建 vendor/bin 目录,并将某些 PHP 包的可执行文件软链接或复制到该目录中。
什么是 vendor/bin?
vendor/bin 是 Composer 创建的一个存放可执行脚本的目录。许多 PHP 工具(如 PHPUnit、Laravel Artisan、PHPStan、Symfony Console 等)在安装后需要通过命令行调用,这些工具的入口脚本通常会被暴露到 vendor/bin 中,方便本地调用。
vendor/bin 是如何生成的?
这个目录的生成依赖于 Composer 对 binaries 的处理机制。具体流程如下:
- 某个 Composer 包在它的 composer.json 中定义了
"bin"字段,例如:
{
"bin": ["bin/my-command"]
}
- 这个字段告诉 Composer:当前包提供了一个或多个可执行脚本,路径为
bin/my-command。 - 当该包被安装到项目时,Composer 会把
bin/my-command添加到 vendor/bin 目录下,可能是创建符号链接(Linux/macOS)或复制文件(Windows 兼容方式)。 - 如果多个包都有 bin 文件,它们都会被集中放入 vendor/bin。
为什么能直接运行这些命令?
你可以在项目中通过 ./vendor/bin/my-command 来运行它。很多现代 PHP 框架和工具链都依赖这种方式,避免全局安装 CLI 工具。
例如:
-
./vendor/bin/phpunit—— 运行测试 -
./vendor/bin/psysh—— 启动交互式控制台 -
./vendor/bin/sail—— Laravel Sail 命令
Composer 在安装过程中会自动处理这些二进制文件的映射,开发者无需手动操作。
基本上就这些。只要依赖包声明了 bin,vendor/bin 就会在安装时自动生成对应脚本。不复杂但容易忽略细节。










