唯一可靠方式是在 composer.json 的 config 段设置 bin-dir 和 bin-compat: "full",改后需重新运行 composer install/update;PATH 需手动配置才能执行生成的命令。

composer.json 里改 bin-dir 是唯一可靠方式
直接运行 composer install --bin-dir=xxx 会报错:Unrecognized option "--bin-dir"。Composer 命令行不支持这个参数,它只认配置文件里的字段。
bin-dir 必须写在项目根目录的 composer.json 的 config 段里,改完后必须重新运行 composer install 或 composer update 才生效——旧的软链不会自动删,得手动清理。
-
bin-dir值是相对路径(如"bin"、"tools"),不能带./或../,也不能含中文、空格、特殊符号 - 目录不需要提前创建,Composer 2.2+ 会自动建;但若设为绝对路径(如
/usr/local/bin),必须确保当前用户有写权限 - Windows 下若目标路径跨磁盘(比如从
C:\到D:\),符号链接必然失败,Composer 自动 fallback 到复制模式,但复制后的.bat文件可能无法正确解析#!行
bin-compat 设成 full 才能绕过中文路径软链失败
只配 bin-dir 不够。在中文操作系统(尤其是 Windows)下,软链常因权限或防病毒软件拦截而静默跳过,最终 bin 目录里空空如也——这不是配置没生效,是软链生成阶段就失败了。
必须同时设置 "bin-compat": "full",强制 Composer 在所有平台都尝试创建符号链接(Linux/macOS)或复制可执行文件(Windows),避免 auto 模式下因检测失败直接放弃。
- 不加
bin-compat或设为auto:Windows 默认用 copy,但某些环境仍会跳过;macOS/Linux 可能因权限不足 silently fail - 设为
full后,Windows 会复制.bat文件,Linux/macOS 会坚持建 symlink,失败时才报错,不会静默 - 这个配置和
bin-dir必须一起出现,单独设bin-compat没意义
PATH 不自动更新,export PATH 是最轻量解法
改了 bin-dir,命令还是 command not found?不是 Composer 配置问题,是 shell 找不到那个目录。Composer 从不碰你的 $PATH。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
临时生效最快:在项目根目录下运行 export PATH="./tools:$PATH"(假设你设了 "bin-dir":"tools")。这行只对当前终端有效,IDE 启动时也不会继承,得重启 IDE 或单独配它的环境变量。
- 永久生效推荐写进
~/.zshrc(macOS/Linux)或系统环境变量(Windows),但协作项目中别用绝对路径——别人 clone 下来路径就断了 - 更稳妥的跨项目方案是进项目后再加路径,或用别名封装:
alias phpunit='php ./vendor/bin/phpunit' - CI 脚本里别硬写
./tools/phpunit,统一用vendor/bin/phpunit或composer exec phpunit
全局 bin 目录要查 composer global config bin-dir --absolute
项目级 bin-dir 只影响当前项目依赖的脚本,全局安装的包(比如 laravel/installer)走的是另一套路径。想看它们到底装在哪,别猜默认位置。
运行 composer global config bin-dir --absolute,立刻得到真实路径:/home/alex/.composer/vendor/bin(Linux)、/Users/alex/.composer/vendor/bin(macOS)或 C:\Users\alex\AppData\Roaming\Composer\vendor\bin(Windows)。
- 这个目录本身由
composer config --global home决定,改过全局home的话,--absolute会如实反映 - 如果
which laravel返回的不是这个路径,说明你之前手动复制过,或者 PATH 里有更高优先级的同名命令 - 全局 bin 目录的 PATH 需要单独加进系统环境变量,且必须确保该路径下文件有执行权限(Linux/macOS)或后缀被识别(Windows)
真正容易被忽略的点是:bin-dir 改的是“放哪”,不是“怎么调”;bin-compat 控的是“怎么放”,不是“放不放”;而 PATH 才决定“能不能敲”。三者缺一不可,但各自职责分明,混在一起调很容易反复踩坑。

















