不能。Composer 官方不支持 exec 子命令,它属于第三方插件扩展;正确执行 vendor/bin 下命令的方式有三种:直接调用全路径(如 ./vendor/bin/phpunit)、使用 Composer scripts 定义后运行 composer test、或借助 npx(需项目含 package.json)。

composer exec 能直接运行 vendor/bin 下的命令吗
不能。Composer 本身没有 exec 子命令——你看到的 composer exec 是第三方插件(比如 hirak/prestissimo 旧版或某些自定义脚本)的非标准扩展,官方 Composer 从 2.0 开始明确不支持该命令。直接敲 composer exec phpunit 会报错:Command "exec" is not defined.
正确执行 vendor/bin/xxx 的三种方式
核心原则:vendor/bin 下的工具本质是带 shebang 的可执行文件,靠 shell 解析,不是 Composer 内置能力。
-
推荐用
npx(Node.js 用户):如果项目同时有package.json,可用npx自动定位并执行,比如npx phpunit(前提是phpunit在node_modules/.bin/或已全局安装) -
直接调用全路径:最稳妥,无依赖,
./vendor/bin/phpunit或php ./vendor/bin/phpunit(后者在 Windows 或 shebang 失效时更可靠) -
用 Composer scripts(适合复用):在
composer.json的scripts里定义,如"test": "php ./vendor/bin/phpunit",然后运行composer test
为什么不用 composer run-script 做通用 exec
composer run-script 只能触发 composer.json 中预定义的 script 名,不能动态传参执行任意 vendor/bin 工具。比如 composer run-script phpunit 会报错,除非你提前写了 "phpunit": "php ./vendor/bin/phpunit" 这条 script。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- script 名必须合法(字母、数字、下划线、短横线),不能含斜杠或点
- 参数传递麻烦:
composer run-script test -- --filter=MyTest中的双短横后内容才透传给脚本,容易漏写或错位 - 无法临时调试:想试一个没配过的 bin 工具(比如刚装的
php-cs-fixer),还得先改composer.json再 dump-autoload
Windows 下 ./vendor/bin/xxx 执行失败的常见原因
Windows 默认不识别 ./vendor/bin/xxx 这种 Unix 风格路径,且很多 vendor/bin 脚本是 Unix shebang(#!/usr/bin/env php),Windows CMD/PowerShell 不解析它。
- 用
php .\vendor\bin\phpunit显式调用 PHP 解释器(注意反斜杠或正斜杠均可,但前面加php) - Git Bash 或 WSL 下可直接用
./vendor/bin/phpunit,但要确认文件有执行权限(chmod +x在 Windows 上无效,得靠 Git Bash 模拟) - 某些工具(如
phpstan)提供.bat同名封装,优先检查是否存在vendor/bin/phpstan.bat
真正卡住人的地方往往不是“怎么写命令”,而是搞不清当前 shell 环境到底认不认 shebang、要不要加 php 前缀、路径分隔符该用哪种——这些细节不试一遍根本记不住。

















