composer 的 bin 目录来自 vendor/bin,由 composer install 自动生成;它不自动加入 $path,需手动配置 export path="./vendor/bin:$path" 或写入 shell 配置文件。

Composer 的 bin 目录是怎么来的?
Composer 本身不自动创建或管理全局 bin 目录;它只在项目根目录下生成 vendor/bin,用于存放当前项目依赖中声明的可执行脚本(比如 phpunit、larastan、psalm)。这个目录是 vendor 的一部分,随 composer install 自动构建,无需手动配置。
为什么 vendor/bin 命令在终端里直接打不响?
因为系统 $PATH 没包含它。终端找不到可执行文件,会报 command not found 错误。这不是 Composer 配置问题,而是 shell 环境路径问题。
- 临时生效:运行
export PATH="./vendor/bin:$PATH"(仅当前终端有效) - 永久生效(推荐):把这行加到你的 shell 配置文件里(如
~/.zshrc或~/.bashrc),然后source ~/.zshrc - 注意路径写法:
./vendor/bin是相对路径,只对当前目录有效;若想跨项目使用,得用$PWD/vendor/bin或干脆不用相对路径——更稳妥的做法是进项目后再加路径,或用别名封装
bin-dir 配置能改 vendor/bin 的位置吗?
可以,但几乎没必要。在 composer.json 里设 "config": { "bin-dir": "tools" } 会让所有可执行文件输出到项目下的 tools/ 而非 vendor/bin/。但它只影响当前项目,且不会自动更新 $PATH。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 改完要重新运行
composer install或composer update才生效 - 如果多个项目用了不同
bin-dir,你就得为每个项目单独配PATH,反而增加维护成本 - 某些工具(如 Laravel Sail)会硬编码找
vendor/bin,改了可能出兼容问题
全局 bin 工具(如 laravel/installer)为什么不能靠 vendor/bin?
因为它们设计就是全局可用的。这类包应通过 composer global require 安装,其二进制文件默认放在 ~/.composer/vendor/bin/(或 Windows 下 %APPDATA%\Composer\vendor\bin)。你只需把该路径加入 $PATH 一次,之后所有 global 安装的命令就都能用了。
- 检查路径:运行
composer global config bin-dir --absolute - 常见坑:macOS M1/M2 上 Homebrew 安装的 PHP 可能导致
~/.composer权限异常,需要chown -R $USER ~/.composer - 不要混用
global和项目本地安装同一工具(比如既require --dev phpunit/phpunit又global require phpunit/phpunit),版本冲突时谁先被$PATH找到谁生效,很难 debug
真正容易被忽略的是:没有哪个配置能让「所有项目的所有 bin 命令无感可用」——要么接受进项目再加路径,要么用 global 统一管理,要么用容器/脚本封装调用逻辑。选哪种,取决于团队协作方式和部署约束。










