任何类型的参数都可以传递给自定义作曲家脚本,只需像往常一样将它们附加到命令行上,但要放在之后(即特殊的参数分离运算符,它不会传递给脚本本身)。--
但是,当没有一个参数以任何连字符开头(即通常称为命令行选项,如或)开头时,您不需要使用参数分离运算符,否则会将它们视为自身的选项,而不是脚本的选项。--
-o
--option
composer
composer
如果自定义脚本定义运行多个命令,则传递的参数将附加到每个命令。此外,您不能使用 shell 编程约定来引用单个参数。$2
如果自定义脚本由回调处理,则脚本负责从参数中分析选项。从回调的角度来看,像和是参数的东西。-c
--option=B
例
给定一个,内容如下:composer.json
{
"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"
]
}
}
并给定一个包含以下内容的文件:MyClass.php
<?php
namespace MyVendor;
use Composer\Script\Event;
use Composer\Installer\PackageEvent;
class MyClass {
public static function myCallback(Event $event) {
var_dump($event->getArguments());
}
}
步骤 0:转储自动加载器以识别 MyClass
$ composer dump-autoload
Generating autoload files
测试 1:显示没有参数分离运算符时发生的情况
$ 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>]...
测试 2:显示参数和选项在回调中的显示方式
$ 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"
}
测试 3:显示如何将参数和选项追加到命令
$ 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
参考资料: https://getcomposer.org/doc/articles/scripts.md