
bin-dir 是 Composer 存放可执行脚本的目录,默认为 vendor/bin;修改它可统一命令路径、适配部署或避免冲突,需通过项目 composer.json 或全局 config 设置,且改后须重装依赖才生效。
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 后重装vendor/bin 路径,需要同步更新C:\tools\bin),要确保路径存在且有写权限;否则 Composer 会静默失败,不报错但也不生成链接bin-dir 路径写相对还是绝对推荐始终用相对路径(如 bin 或 .bin),原因很实际:
例如写成 "bin-dir": "bin",最终就是 ./bin;写成 "bin-dir": "/tmp/bin",很可能在下次 composer install 时被忽略或报错。