composer install --no-dev 安装扩展后如何处理本地环境生成的Provider

当我们在项目中引用一些调试扩展时,例如:telescope
我们本地环境使用composer require laravel/telescope --dev命令来引用,安装后生成TelescopeServiceProvider服务提供者,然后我们在生产环境,通过git同步代码,然后使用composer install --no-dev,使其不在生产环境中安装,但是代码中已包含TelescopeServiceProvider服务提供者,composer安装时会报telescope相关扩展不存在的问题,请问能如何优雅的解决这个问题?

阅读 7.5k
2 个回答

提交生成环境的机器在提交的时候删除相关测试的包composer.json 然后omposer update 至于服务提供者注释或拉分支解决

Laravel Telescope 最新文档给出了可行的方案。

1.config/app.php中移除TelescopeServiceProvider

2.App\Providers\AppServiceProvider 文件中基于环境加载(之前经@陈天赐 老哥提示也是基于环境加载的,但是没生效,用了官方的写法生效了,在这里还是要感谢一下老哥)。

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    if ($this->app->environment('local')) {
        $this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class);
        $this->app->register(TelescopeServiceProvider::class);
    }
}

3.取消对telescope的自动发现。修改 composer.json

"extra": {
    "laravel": {
        "dont-discover": [
            "laravel/telescope"
        ]
    }
},
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题