如何防止composer立即将stderr打印到stdout


How to prevent prevent composer from immediately printing stderr to stdout

目标

如果.env缺少,则停止运行composer安装

composer.json片段

"scripts": {
    "pre-install-cmd": "[[ -a .env ]] || echo '.env missing. please create .env' 1>&2 && exit 1;"
},

输出

$ composer install
.env missing. please create .env
Script [[ -a .env ]] || >&2 echo '.env missing. please create .env' && exit 1; handling the pre-install-cmd event returned with an error

  [RuntimeException]
  Error Output: .env missing. please create .env

所需

与上面相同,但没有cruft,特别是立即回响的&冗余.env missing. please create .env

问题

如何防止composer立即回显该字符串-q开关也会发生这种情况

我想知道这应该如何工作?

您要求Composer运行您的脚本。该脚本创建输出,并将其显示出来。

现在,该脚本的返回代码发出了一个错误条件的信号。剩下的就交给作曲家了。通知用户哪个脚本失败是一个好主意(这会直接解释回显输出后的行),因为脚本不必回显任何内容,并且您可以在那里自由运行多个脚本行。

然后,一般的Composer错误显示在另一个时间开始,再次声明错误条件产生了一些输出。

现在我想知道你想压制什么。第一行?那就什么都不要回响。

以后还有线路吗?运气不好,这就是Composer通常处理错误的方式。

回过头来看,我会问为什么Composer不应该被允许安装依赖项?Composer不需要该文件,如果您的代码需要它,它应该为用户提供一种更简单的方法来创建该文件,或者检查它是否存在,并以合理的默认值假设做出反应,或者拒绝工作,这将使您能够更好地控制显示错误消息的情况。