【发布时间】:2020-05-27 14:29:13
【问题描述】:
我编写了一个自定义 Artisan 命令(我们称之为 MyDusk.php),它扩展/抽象了核心 Dusk 命令的一些功能。
此自定义命令从 Dusk 包中扩展 Laravel\Dusk\Console\DuskCommand。
问题是,在生产中没有安装 Dusk 包(它在 composer.json 中的 require-dev 下)
因此,当 composer 在生产环境中生成其自动加载文件时,它会在到达 MyDusk.php 时出错,因为它找不到 Laravel\Dusk\Console\DuskCommand。
PHP Fatal error: Class 'Laravel\Dusk\Console\DuskCommand' not found in app/Console/Commands/Dusk.php on line 10
In Dusk.php line 10:
Class 'Laravel\Dusk\Console\DuskCommand' not found
我尝试将 Dusk 包移动到 require,这样它就可以在生产环境中使用(我知道,这并不理想),但是核心 Dusk 服务提供程序中有一行在生产环境中运行时会引发异常,从而阻止了这种情况:
# From: vendor/laravel/dusk/src/DuskServiceProvider.php
if ($this->app->environment('production')) {
throw new Exception('It is unsafe to run Dusk in production.');
}
我正在尝试最优雅的解决方案,让我的自定义 Dusk 命令成为应用程序的一部分并在本地访问,而不会在生产环境中引发错误。
一个想法:将我的 Dusk 命令编写为自己的包,这也仅在 require-dev 中。
还有其他想法吗?
【问题讨论】:
标签: php laravel laravel-artisan laravel-dusk