如何从命令行将参数传递给作曲家脚本?

ext*_*xts 11 php composer-php

我正在尝试通过cli运行自定义编写器脚本,如下所示:

composer custom_script_cli --custom_argument

会发生什么呢?作曲家认为我要求作曲家是否要将该论点传递给作曲家而不是自定义脚本.

有没有办法在不强制将其添加到自定义脚本本身的情况下执行此操作?

我发现与此主题相关的唯一问题是2013年的git问题,当时表示这是不可能的.4年后还不确定是否仍然如此.

小智 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)

步骤0:转储Autoloader以识别MyClass

$ composer dump-autoload
Generating autoload files
Run Code Online (Sandbox Code Playgroud)

测试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>]...
Run Code Online (Sandbox Code Playgroud)

测试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"
}
Run Code Online (Sandbox Code Playgroud)

测试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
Run Code Online (Sandbox Code Playgroud)

参考:https://getcomposer.org/doc/articles/scripts.md


Kam*_*han 6

您可以--在脚本条目的末尾添加双破折号。

通过这种方式,您可以将其他参数/​​选项传递给底层脚本。

{
    "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)