composer install 默认将包的 bin 脚本软链接至 vendor/bin/,不会自动加入 $path;需在项目根目录执行 vendor/bin/phpunit,或检查包是否声明 "bin" 字段、shebang 路径是否正确。

composer install 后 bin 目录没生成可执行文件?
默认情况下,composer install 只会把包的 bin 脚本软链接到项目根目录下的 vendor/bin/,不会自动加到系统 $PATH,更不会改全局执行路径。你执行 phpunit 报“command not found”,大概率是因为没进对目录,或没用对方式调用。
- 确认当前在项目根目录(即有
composer.json的那层),再运行vendor/bin/phpunit - 别直接敲
phpunit—— 除非你手动把vendor/bin加进了$PATH(不推荐,污染环境) - 如果
vendor/bin/下压根没文件,检查对应包是否声明了"bin"字段(如"bin": ["phpunit"]),且该包已成功安装 -
composer create-project有时跳过 bin 安装,可补跑一次composer install --no-dev或删掉vendor重装
想让 composer 全局 bin 脚本走自定义目录?
Composer 支持用 config bin-dir 指定本地项目的 bin 存放位置,但注意:它只影响当前项目,不是全局设置;而且必须是相对路径(相对于项目根目录),不能写绝对路径。
- 在项目中运行:
composer config bin-dir scripts→ 后续vendor/bin就变成scripts/ - 这个配置会写入项目级
composer.json的"config": {"bin-dir": "scripts"},不影响其他项目 - 别在
~/.composer/config.json里设bin-dir—— Composer 会忽略,不生效 - 改完要重装依赖:
composer install或composer update才会重建符号链接
全局安装的包(如 laravel/installer)怎么指定 bin 路径?
全局 bin 路径由 Composer 自己决定,不能通过 config 覆盖。它的位置取决于你的系统和 Composer 版本:
- Linux/macOS:通常是
~/.composer/vendor/bin(旧版)或~/.config/composer/vendor/bin(v2.2+) - Windows:类似
%APPDATA%\Composer\vendor\bin - 必须把该路径手动加入系统
$PATH,否则全局命令不可用 - 查当前全局 bin 路径最准的方式:
composer global config bin-dir --absolute - 别试图用
composer global config bin-dir /my/path—— 这个命令只是读取,不接受赋值
为什么 vendor/bin 下的脚本执行报错 “No such file or directory”?
常见于 macOS/Linux 上,表面看文件存在,却提示找不到。本质是 shebang 行指向了不存在的 PHP 解释器路径,比如脚本头是 #!/usr/bin/env php,但系统没装 php 命令,或装在非标准路径(如 Homebrew 装的 php 在 /opt/homebrew/bin/php)。
- 先运行
which php确认 PHP 可执行文件位置 - 检查脚本第一行:
head -1 vendor/bin/phpunit,若指向错误路径,可临时改用php vendor/bin/phpunit绕过 - 更稳妥做法:确保
php在$PATH中可用,或用composer config --global fxp-asset-proxy.enable false类似方式避免某些插件干扰(极少数情况) - Windows 用户遇到类似问题,大概率是 Git Bash 的 shebang 解析异常,建议改用 PowerShell 或 CMD 执行
bin-dir 是独立的,改了一个项目不会影响另一个;而全局 bin 路径根本没法用 config 命令改——它就是 Composer 写死的逻辑,只能靠改系统 PATH 或换 PHP 安装方式来适配。










