
在 Composer 中执行自定义脚本命令时,若需向底层可执行文件(如 codecept)传递参数,必须使用双连字符 -- 分隔 Composer 自身参数与目标命令参数,否则参数会被 Composer 解析并报错。
在 composer 中执行自定义脚本命令时,若需向底层可执行文件(如 `codecept`)传递参数,必须使用双连字符 `--` 分隔 composer 自身参数与目标命令参数,否则参数会被 composer 解析并报错。
当你在 composer.json 中定义如下自定义脚本:
{
"scripts": {
"codecept": "../projectA/vendor/bin/codecept"
}
}
调用 composer codecept bootstrap 是可行的——Composer 会直接执行该路径下的二进制文件。但一旦你尝试附加原生命令支持的选项(例如 --empty),如:
composer codecept bootstrap --empty
Composer 会将 --empty 视为其自身命令行解析的一部分,而 composer 并不识别该选项,因此抛出错误:
[SymfonyComponentConsoleExceptionRuntimeException] The "--empty" option does not exist.
✅ 正确做法:使用 -- 显式分隔 Composer 参数与下游命令参数。-- 告诉 Composer 停止解析后续所有参数,并将其原样透传给目标程序:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer codecept bootstrap -- --empty
同理,其他复杂场景也适用该规则:
# 运行测试并启用调试模式 composer codecept run acceptance -- -d --html # 指定配置文件路径 composer codecept build -- -c ./tests/codeception.yml
⚠️ 注意事项:
- -- 必须紧接在 composer
之后,且前后均需有空格; - 所有位于 -- 之后的参数将不经过 Composer 解析,完全交由目标可执行文件处理;
- 若脚本定义为 PHP 函数(如 "codecept": "Codeception\Command\Run::main"),则 -- 同样适用,但需确保该函数能正确接收 $argv 或使用 Symfony Console 的 InputInterface 解析透传参数;
- 不建议在 scripts 中使用 exec 或 shell 封装(如 "codecept": "exec ../projectA/vendor/bin/codecept"),这会破坏参数透传机制并可能引发 Shell 解析问题。
? 小技巧:可通过 composer run-script --list 查看当前所有可用脚本;使用 composer help run 了解 run 命令本身的选项用法,避免混淆层级。
掌握 -- 分隔符是高效复用第三方 CLI 工具(如 Codeception、PHPStan、Psalm)的关键,也是 Composer 脚本进阶实践的基础规范。










