任何类型的参数都可以简单地传递给 custom-composer-scripts
通过像往常一样将它们附加在命令行上,但在 -- 之后
(即特殊的参数分隔运算符,它不会传递给脚本本身)。
但是,您不需要使用 -- 参数分隔运算符
当没有参数以任何连字符开头时
(即通常所说的命令行选项,如-o 或--option)
否则composer 会将它们视为composer 本身的选项,而不是脚本。
如果自定义脚本定义运行多个命令,则传递的参数将附加到每个命令。此外,您不能使用 $2 之类的 shell 编程约定来引用单个参数。
如果自定义脚本由回调处理,则脚本负责从参数中解析选项。从回调的角度来看,-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:转储 Autoloader 以识别 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