composer exec不是官方命令,它在Composer 2.0+中已被移除;所谓“能用”实为第三方插件残留、误用run-script或shell直接调用所致;唯一官方类似功能是composer global exec,仅限全局包且不兼容vendor/bin。

composer exec 不是官方命令,别再试了
它在 Composer 2.0+ 中已被移除,直接运行 composer exec phpunit 会报错:Command "exec" is not defined。你看到的“能用”,基本是以下三种情况之一:
– 本地装了已废弃的第三方插件(比如 hirak/prestissimo),它偷偷注入了 exec 命令,但和 Composer 2.5+ 不兼容
– 实际执行的是 composer run-script phpunit,而 composer.json 里恰好定义了 "phpunit": "php ./vendor/bin/phpunit"
– shell 直接调用了系统 PATH 里的全局 phpunit,和 Composer 完全无关
真正能跨平台跑 vendor/bin 工具的只有这三种方式
核心原则:vendor/bin 下的文件本质是可执行脚本,靠 shell 解析,不是 Composer 的功能。安全、稳定、无需插件的方案只有:
– 直接调全路径:php ./vendor/bin/phpunit(加 php 前缀可绕过 Windows .bat 权限问题,也避免 shebang 失效)
– 走 scripts:在 composer.json 里写 "scripts": {"test": "php ./vendor/bin/phpunit"},然后跑 composer test
– Node.js 项目可用 npx:如果项目有 package.json,且工具已通过 npm install --save-dev phpunit/phpunit 安装,npx phpunit 就能自动定位并执行
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
为什么 composer global exec 不能替代本地执行
composer global exec 是唯一官方支持的类似命令,但它只作用于全局安装包:
– 必须先 composer global require phpunit/phpunit,否则报 Command "phpunit" is not defined
– 它查的是 ~/.composer/vendor/bin/(Linux/macOS)或 %APPDATA%\Composer\vendor\bin\(Windows),和当前项目的 vendor/bin/ 完全无关
– 不支持交互式命令(如 psysh),卡输入是正常现象
– 参数仍需用 -- 分隔:composer global exec phpunit -- --filter=testLogin
最容易被忽略的三个检查点
很多人反复试 composer exec 却失败,根本原因常是:
– 没确认 Composer 版本:composer --version,低于 2.2 的版本压根不支持(哪怕你装了插件)
– vendor/bin/ 是空的:没运行过 composer install 或 composer update,或者用了 --no-bin-links
– 包没正确暴露二进制:比如 composer require --dev phpunit/phpunit 装对了,但该包的 composer.json 里没声明 "bin" 字段,vendor/bin/phpunit 就不会生成

















