bin-dir 是 Composer 存放可执行脚本的目录,默认为 vendor/bin;修改它可统一命令路径、适配部署或避免冲突,需通过项目 composer.json 或全局 config 设置,且改后须重装依赖才生效。

Composer 的 bin-dir 是什么,改它有什么用
bin-dir 是 Composer 用来存放可执行脚本(vendor bin scripts)的目录,默认是 vendor/bin。比如你运行 composer require phpunit/phpunit,它会把 phpunit 命令软链或复制到这个目录下。改它,主要是为了统一管理命令路径、适配部署规范,或者避免和项目其他 bin 冲突。
怎么修改 bin-dir 配置
有两种方式,优先级从高到低:
- 项目级:在项目根目录的
composer.json中添加:"config": { "bin-dir": "scripts" } - 全局级:运行命令设置(影响当前用户所有项目):
composer config --global bin-dir ~/bin
注意:--global 设置后,若项目 composer.json 里也定义了 bin-dir,则以项目配置为准 —— Composer 总是优先读取本地配置。
改完 bin-dir 后常见问题
改完不生效?大概率是没重装依赖:
- 必须运行
composer install或composer update,才能让 Composer 重新生成软链接 - 如果之前已安装过包,旧的
vendor/bin/xxx不会自动删除,得手动清理或rm -rf vendor后重装 - 某些工具(如 IDE、CI 脚本)可能硬编码了
vendor/bin路径,需要同步更新 - Windows 下若设为绝对路径(如
C:\tools\bin),要确保路径存在且有写权限;否则 Composer 会静默失败,不报错但也不生成链接
bin-dir 路径写相对还是绝对
推荐始终用相对路径(如 bin 或 .bin),原因很实际:
- 相对路径会被解析为相对于项目根目录,跨环境一致
- 绝对路径在 CI/CD 或不同开发者机器上容易失效
- Composer 官方文档明确说明:只有相对路径被保证兼容;绝对路径行为未定义,不同版本可能表现不一
例如写成 "bin-dir": "bin",最终就是 ./bin;写成 "bin-dir": "/tmp/bin",很可能在下次 composer install 时被忽略或报错。










