gpt4 book ai didi

php - 如何从命令行将参数传递给 Composer 脚本?

转载 作者:可可西里 更新时间:2023-10-31 22:47:48 26 4
gpt4 key购买 nike

我正在尝试像这样通过 cli 运行自定义 Composer 脚本:

composer custom_script_cli --custom_argument

发生的事情是 composer 认为我在询问 composer 我是否想将该参数而不是自定义脚本传递给 composer。

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

我发现唯一与此主题相关的是 git issue from 2013当时说这是不可能的。不确定 4 年后是否仍然如此。

最佳答案

任何类型的参数都可以简单地传递给 custom-composer-scripts像往常一样将它们附加在命令行上,但在 -- 之后(即特殊参数分离运算符,它不会传递给脚本本身)。

但是,您不需要使用-- 参数分隔符当没有任何参数以任何连字符开头时(即通常称为命令行选项的内容,如 -o--option)else 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

关于php - 如何从命令行将参数传递给 Composer 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44910354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com