我正在尝试通过cli运行自定义编写器脚本,如下所示:
composer custom_script_cli --custom_argument
会发生什么呢?作曲家认为我要求作曲家是否要将该论点传递给作曲家而不是自定义脚本.
有没有办法在不强制将其添加到自定义脚本本身的情况下执行此操作?
小智 11
参数可以像往常一样通过将它们附加到命令行来传递给自定义编写器脚本.但是,如果参数以一个或多个连字符开头(即通常称为命令行选项),则除非使用特殊参数分隔运算符,否则composer会将该参数视为composer命令本身的选项--.
如果自定义脚本定义运行多个命令,则传递的参数将附加到每个命令.此外,您不能使用shell编程约定--来引用单个参数.
如果自定义脚本由回调处理,则脚本负责从参数解析选项.从回调的角度之类的东西-o,并--option有观点.
鉴于composer以下内容:
{
"autoload": { "psr-4": { "MyVendor\\": "./" } },
"scripts": {
"pass-args-to-callback": [
"MyVendor\\MyClass::myCallback"
],
"pass-args-to-commands": [
"echo one",
"echo two",
"@other-command"
],
"other-command": [
"echo three"
]
}
}
Run Code Online (Sandbox Code Playgroud)
并给出一个composer包含以下内容的文件:
<?php
namespace MyVendor;
use Composer\Script\Event;
use Composer\Installer\PackageEvent;
class MyClass {
public static function myCallback(Event $event) {
var_dump($event->getArguments());
}
}
Run Code Online (Sandbox Code Playgroud)
$ composer dump-autoload
Generating autoload files
Run Code Online (Sandbox Code Playgroud)
$ composer pass-args-to-callback A --option=B -C
[Symfony\Component\Console\Exception\RuntimeException]
The "--option" option does not exist.
pass-args-to-callback [--dev] [--no-dev] [--] [<args>]...
Run Code Online (Sandbox Code Playgroud)
$ composer pass-args-to-callback -- A --option=B -C
> MyVendor\MyClass::myCallback
array(3) {
[0]=>
string(1) "A"
[1]=>
string(10) "--option=B"
[2]=>
string(2) "-C"
}
Run Code Online (Sandbox Code Playgroud)
$ composer pass-args-to-commands -- A --option=B -C
> echo one 'A' '--option=B' '-C'
one A --option=B -C
> echo two 'A' '--option=B' '-C'
two A --option=B -C
> echo three 'A' '--option=B' '-C'
three A --option=B -C
Run Code Online (Sandbox Code Playgroud)
参考:https://getcomposer.org/doc/articles/scripts.md
您可以--在脚本条目的末尾添加双破折号。
通过这种方式,您可以将其他参数/选项传递给底层脚本。
{
"scripts": {
"test": "phpunit",
"test-single": "phpunit --"
}
}
Run Code Online (Sandbox Code Playgroud)
要test-single使用自定义 phpunit 过滤器运行脚本:
composer test-single --filter test_function
Run Code Online (Sandbox Code Playgroud)