"php artisan myCommand" 处理返回错误代码 1 的 post-install-cmd 事件

"php artisan myCommand" handling the post-install-cmd event returned with error code 1

我创建了一个控制台命令,它将根据用户输入自动设置数据库,我在 post-install-cmd 中添加了该命令,但是当我 运行 composer install 命令它时 return error code 1.

如果我 运行 像 php artisan setupDB 那样手动命令它工作,我不知道是什么问题。

可能是我在错误的脚本事件中添加了我的命令!

这是我在 composer.json 文件中的脚本部分。

"scripts": {
        "post-autoload-dump": [
            "Illuminate\Foundation\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ],
        "post-install-cmd": [
            "Illuminate\Foundation\ComposerScripts::postUpdate",
            "php artisan setupDb",
            "php artisan optimize"
        ]
    }

这是SS的错误。

问题出在 composer 版本上,因为如果你 运行 post-install-cmdpre-install-cmd 中的任何 artisan 命令,它将 运行 但有些命令要求用户输入,就像我在问题中描述的那样 setupDb 将从用户那里获取输入。

我是如何发现问题的?

我用了一个 post-autoload-dump 的例子 "Illuminate\Foundation\ComposerScripts::postAutoloadDump",是在这个事件中添加的,我在想控制台命令应该是这样的。

我尝试在 artisan 命令之前在 post-install-cmd 中添加 Illuminate\Console 并且它 return 它已被当前作曲家版本弃用,所以我将我的作曲家更新为 v2,然后它可以工作就像一个魅力。

回答

所以答案是您需要将作曲家版本更新为 运行 post-install-cmd 自定义命令,例如 (setupDb)

"scripts": {
        "post-autoload-dump": [
            "Illuminate\Foundation\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ],
        "post-install-cmd": [
            "php artisan setupDb",
            "php artisan optimize"
        ]
    }

它不会return任何错误,如果有任何命令需要,它也会询问用户输入。