config.bin-dir 仅影响新安装包,已安装包不会自动迁移;需清缓存、删 vendor 后重装才生效;项目配置优先于全局,路径须为相对路径;path 未更新则命令仍不可用;windows 下应避免空格/中文路径。

config.bin-dir 设置后 composer install 不把可执行文件放进去?
常见现象是改了 bin-dir,但 vendor/bin 里还是有东西,新目录空着——根本原因是:这个配置只影响「后续新安装的包」,对已安装包不生效。composer install 不会自动迁移旧 bin 文件,也不会重写已存在的 vendor/bin 符号链接或复制行为。
实操建议:
- 先运行
composer clear-cache,避免缓存干扰 - 删掉整个
vendor/目录(别只删vendor/bin) - 再执行
composer install,这时才会按新bin-dir路径生成可执行文件 - 如果用了
"bin-dir": "tools",确保tools/目录存在且可写,否则会静默失败
全局 config 和项目 config 的 bin-dir 哪个生效?
项目级配置优先级高于全局。也就是说,composer.json 里写的 "config": {"bin-dir": "scripts"} 会覆盖 ~/.composer/config.json 或 COMPOSER_HOME/config.json 里的同名设置。
使用场景:团队想统一用 bin/ 而不是默认 vendor/bin/,就在项目根目录 composer.json 的 config 段直接写死;个人开发环境调试多个项目时,才考虑改全局配置。
注意点:
- 全局设置命令是
composer config --global bin-dir /usr/local/bin,但不推荐指向系统/usr/local/bin,权限和冲突风险高 - 项目配置必须是相对路径(如
"bin"、"./bin"),不能写绝对路径,否则composer install会报错Invalid bin-dir path - 相对路径基于项目根目录解析,不是基于
composer.json所在位置
bin-dir 改了,为什么 phpunit 还是找不到?
本质是 shell 的 PATH 查找逻辑没变。即使 composer install 把 phpunit 放进了 tools/phpunit,如果你没把 tools/ 加进 $PATH,终端依然只能找到 vendor/bin/phpunit(如果还存在)或者根本找不到。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
解决办法很直接:
- 临时用:
./tools/phpunit(注意前面的./) - 长期用:在 shell 配置里加
export PATH="./tools:$PATH"(zsh/bash profile 中),然后source一下 - CI 场景下,直接在脚本里写完整路径,比如
./tools/phpunit --testdox,更稳定
别依赖“改了 bin-dir 就能全局敲命令”,Composer 不负责改你的环境变量。
Windows 下设 bin-dir 要特别注意什么?
Windows 默认不认 Unix 风格的可执行文件(没扩展名的 phpunit),Composer 会自动生成 .bat 包装器。但如果 bin-dir 路径含空格或中文,.bat 文件里的调用路径容易出错,导致双击或命令行执行时报 'php' is not recognized 或路径不存在。
稳妥做法:
- 避开空格和中文,用
bin、tools、run这类纯英文短名 - 确认 PHP 已加入 Windows
PATH,否则.bat脚本第一行@php就会失败 - 不要用 OneDrive 或 WSL 路径做
bin-dir,文件系统兼容性问题会导致composer install卡住或跳过生成
最省事的方式其实是不改 bin-dir,直接把 vendor/bin 加进系统 PATH——毕竟 Windows 用户通常更习惯“配一次 PATH,到处能用”。










