【问题标题】:Composer Script echo作曲家脚本回声
【发布时间】:2022-05-01 23:56:42
【问题描述】:

composer.json 脚本中回显到控制台的最佳方式是什么?例如,我使用脚本部分创建了一个自定义安装程序,最后我想在控制台中显示一条消息。

目前我只是在做这样的回声

"scripts": {
    "post-update-cmd": [
        "clear",
        "echo \"\n\nInstallation Complete\""
    ]
}

这可行,但它会在控制台中打印出命令和回显,所以它最终看起来像这样。

因为 composer 无论如何都会输出脚本中的所有自定义命令,所以它会加倍并且看起来很丑!

使用composer scripts 将消息回显到控制台的最佳和最简洁的方法是什么?

【问题讨论】:

标签: php composer-php


【解决方案1】:

如果您使用 PHP 类而不是直接使用 shell 编写脚本,则可以使用 Composers 的 IO 系统写入控制台。

例如,创建一个类似这样的类:

<?php

declare(strict_types=1);

namespace MyApp\Composer;

use Composer\Script\Event;

class ScriptHandler
{
    public static function myScript(Event $event): void
    {
        // Your script here
    }
}

Composer\Script\Event 类有一个名为getIO() 的方法,您可以使用它来获取Composer\IO\IOInterface 的实例,然后它有一个方法write,使您的myScript 方法看起来像这样:

public static function myScript(Event $event): void
{
    $event->getIO()->write('foo'):
}

最后,要使用这个类,只需在你的post-update-cmd 中引用它:

"scripts": {
    "post-update-cmd": [
        "MyApp\\Composer\\ScriptHandler::myScript"
    ]
}

【讨论】:

  • 我需要它成为我可以在 composer.json 文件的 scripts 部分中运行的东西,不过还是谢谢你
  • 您可以在scripts 部分中使用 FQCN 和方法名称引用该类,它应该与直接运行脚本非常相似。
  • 我不是 100% 确定您的意思,请您详细说明一下吗?
  • 我已经更新了我的答案来详细说明。我希望它能让它更清晰。
  • @nelson6e65 我不认为你可以。命令方法在其签名中使用void 返回类型,表示它们不应返回任何内容。也就是说,Composer 不会使用脚本的返回值。
【解决方案2】:

我今天只需要做类似的事情,不想为此编写整个脚本/类。

通过滥用两件事,我让它比我预期的更好:

  1. 大多数控制台不执行以井号开头的文本
  2. 原来脚本命令是通过symfony console output传递的

例如:

  "scripts": {
    "post-update-cmd": [
      "# <info>For your info</info>",
      "# <comment>A comment</comment>",
      "# <error>Error!!!!</error>",
      "# <href=https://symfony.com>Symfony Homepage</>"
    ]
  }

产生:

多田!

注意事项:

  1. 无论如何都会显示井号和尖括号
  2. 无论如何都会执行该命令 - 不理解井号标记的终端会产生奇怪/可能具有破坏性的结果

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多