支持Laravel.io的持续发展 →

PHP生态系统

4 Apr, 2022 25 min read 3,010 views

引言

就像生活中的任何主题一样,当你刚开始学习某件事物时,大量的不同名称和术语可能会让你感到有些不知所措。当你浏览不同的网站、指南、视频和论坛时,你会遇到各种产品名称、缩写和一些认为你已经具备相关知识的一般性回答。

这正是我第一次开始学习Laravel时的感受。

作为一个主要为Laravel应用程序工作的开发者,我感到非常幸运!生态系统和可用的第一方包帮助我们开发者更容易地生活。我们不需要花费数小时来搭建认证框架,或配置令人困惑的Webpack配置文件或设置API认证。如果核心框架没有处理我们日复一日看到的一些平凡任务,那么很可能Laravel团队提供的包或服务可以做到。

但是,由于存在如此多的包和服务,如果你是新来的Laravel世界的一员,一开始理解每个包可能会有一些困惑。你可能会坐那里问自己,“我是否需要使用Laravel Sail?”、“我应该使用Breeze还是Jetstream?”以及“什么是Echo?”。

因此,本文的目的是简要介绍每个包和服务的功能。希望对于新来的Laravel开发者,这将让你对第一方生态系统有一个简单的了解,以便你可以决定何时使用一个包而不用另一个。

服务

由Laravel提供的三个服务都与您应用程序的服务器管理和部署相关。它们都是付费服务,但您所节省的时间远超过了服务的费用。

1. Envoyer

Envoyer是一个在线部署系统,您可以使用它将应用程序部署到服务器,而无需中断。

我需要这个吗?

如果您维护的应用程序体验不可中断至关重要,Laravel Envoyer可能适合您。它允许您在不让用户意识到应用正在发布的情况下向他们发布应用程序。如果断电不是必然的问题,您可能只需使用下一节解释的Laravel Forge即可。

2. Forge

Forge是一个服务器管理系统,您可以用来维护您的服务器并部署您的Laravel应用程序。您只需通过服务器提供商(如 AWSDigital OceanLinode)连接Forge,并提供版本控制(如 GitHubBitbucketGitLab)的凭证。从那时起,您就可以创建和配置服务器,然后部署您的应用程序。

我个人非常喜欢使用Forge,因为它使得维护我的服务器并轻松推送我的网站和应用程序的新版本变得非常简单。以前,我曾尝试自己配置和维护服务器。当然,我成功做到了,但这非常耗费时间,对我来说,作为一个不喜欢在服务器和基础设施上工作的人,这相当枯燥!转向Forge为我节省了大量时间(和压力!)

我需要这个吗?

如果您将构建自己的Laravel项目并将其部署到服务器,或者您负责您的工作中的部署和服务器管理,我建议您尝试一下Forge。您可以用它做的所有工作都可以手动完成,但使用Forge节省的时间将远远超过成本。还有其他替代方案,如Runcloud,但我非常喜欢使用Forge,并认为这是支持Laravel核心团队的一种很好的方式。

3. Vapor

Vapor是一个无服务器部署平台,您可以使用它将Laravel应用程序部署到AWS。Vapor最酷的地方是它允许您的应用程序基础设施在需要时进行扩展以满足流量需求。这对于可能会有流量峰值并且需要自动增加网站速度的应用程序和系统非常有用。

以一个非常基础的例子来说,假设您拥有一家运行在传统服务器上的电商网站,并且它有持续不断的流量。现在,让我们设想一下,您正在销售一本非常酷的全新Laravel电子书,并且您为它的发布日做了很多炒作。在发布日,您迎来了大量的流量涌入,这导致您的网站运行缓慢(甚至更糟,完全崩溃)。您可以想见,这可能会有些尴尬,并且会引起头痛,因为您会忙着寻找加快网站速度的方法。您甚至可能选择部署更多的服务器,并将它们配置在负载均衡器后面以分流流量。您可以想象,这可能会很繁琐,因为您随后还得处理多余的服服务器。除非您是那种喜欢摆弄服务器的人,如果这种情况经常发生,您可能会觉得这个任务有点烦人,因为它让您无法做我们最喜欢做的事情:搭建酷炫的新事物。

这就是Vapor发挥作用的地方。如果您有一个项目有时需要快速扩展以应对大量流量的激增,它可以做到。然后,一旦流量再次降低,基础设施可以自动缩放回需要的大小。

我需要这个吗?

如果您有一个传统服务器可能无法应对流量激增的项目,您可能想了解一下Vapor。

如果您刚刚开始一个新项目,您可能不必一定要使用Vapor。如果是这种情况,我可能会建议您先在传统服务器上使用类似Laravel Forge的东西。然后,当您部署了应用程序后,如果您发现您的应用程序可能从自动扩展中受益,您可以考虑切换到Vapor。当然,这只是我的建议,这需要您(或您的团队)在项目的基础上做出决定。

Laravel提供大量的一站式包,可以帮助您迅速部署应用程序。大部分包都是完全免费的,但也有少数是付费的。

1. Breeze

Breeze 是一个入门工具包,它提供“Laravel所有认证特征的简约简单实现”。这是一个可以直接添加到您的Laravel项目中以获取一些简单功能的包,例如:登录、注册、密码重置、电子邮件验证和密码确认。

Breeze提供了两种不同的版本:BladeInertia。如果您选择Blade版本,视图将使用Laravel的Blade模板语言构建。然而,如果您选择Inertia版本,视图将使用Inertia结合 VueReact 构建。无论您使用哪种实现,Breeze都使用 Tailwind CSS 进行样式化,因此如果您熟悉它,您可以立即开始根据项目的需求自定义它。

我需要这个吗?

如果您正在寻找一套简单轻量级的认证功能用于您的应用程序,我强烈建议您使用Breeze。在一个全新的Laravel应用程序中,您可以在几分钟内完成安装并准备好使用。这样,您可以立即开始构建您的酷炫新项目,而不是花时间搭建认证系统。

2. Cashier

Cashier 是一个非常有用的组件,你可能会在某个时刻在你的 Laravel 应用程序中使用它。它处理了你与 StripePaddle 工作时通常需要自己编写的许多样板订阅代码。Cashier 允许你设置服务年费订阅、一次性付款和账单。它甚至还有一些酷炫的功能,可以帮助你为你的项目设置订阅试用。

如果你是新从事网页开发,可能会因为 Cashier 尺寸很大并且提供了很多功能而觉得有点难以掌握。然而,如果你是一个经验丰富的开发者,正在转向 Laravel,我认为你会对它的易用性感到很惊喜。

过去,我参与过一些手动处理订阅、试用和付款的项目。如你所想,工作起来相当恐怖,我非常讨厌去碰那一块代码。但在另一个项目中,我们使用了 Cashier,我非常满意。我们能够毫无困难地添加订阅、试用和付款系统。这个组件易于理解,使我们能够迅速投入使用。

我需要这个吗?

如果你考虑让你用户进行支付,无论是持续性的订阅还是一次性付款,我强烈建议你考虑使用 Cashier。你可以直接与 Stripe 和 Paddle API 进行通信,但该组件提供的特性和助手方法可以节省大量的时间,并且已经过实战测试,因此你可以有信心这些功能确实可行。

3. Dusk

Dusk 是一个浏览器自动化组件,可用于测试你的 Laravel 应用程序(在 Chrome 和其他浏览器中)。在我看来,这个组件对你的项目非常有价值,尤其是在它们成长的时候。它可以让你编写模拟用户在浏览器中的操作的测试。作为基本示例,你可以让它登录到你的应用程序,填写表格,然后验证当你输入无效数据时预期的验证错误是否显示。

我过去在项目中使用过它,它很有助于捕捉通过我们的 JavaScript 单元测试和 PHP 测试漏网的错误。然而,值得注意的是,这些测试与单元测试相比有时可能运行时间较长,所以你需要在开发流程中加入它们,而不会在它们运行时减慢你。

我需要这个吗?

在我看来,如果你正在构建其他用户将要使用的项目,我认为测试是绝对必要的。因此,我肯定会推荐进行一些形式的浏览器测试。

然而,正如我提到的,这些测试有时可能需要很长时间才能运行,如果设置不正确而且你持续更改你的应用程序的用户界面,它们也容易出错。例如,如果在应用程序的早期阶段,你的用户界面可能会频繁变化,直到你得到一个更稳定的东西。如果你处于这种情况,你可能不需要 Dusk,因为它可能会减缓你的进度。但如果你认为你应用程序的用户界面短期内不太可能发生重大变化,我认为使用 Dusk 编写得浏览器测试会对你非常有帮助。

还应指出,如果你更喜欢用 JavaScript 而不是 PHP 编写自动化浏览器测试,那么你可能想了解一下 Cypress

4. Echo

Laravel Echo 是一个JavaScript库,让在Laravel应用程序中使用WebSockets变得极其简单。您可以使用它来订阅频道并监听服务器端从应用程序广播的事件。

如果您是Web开发的初学者,您可能根本不知道WebSockets是什么,或者它们有什么用途。因此,为了理解Echo的价值,让我们看看一个基本示例。让我们想象我们有一个页面,显示博客文章并允许读者在下方评论。现在,如果读者对帖子进行了评论,我们希望向其他读者展示该评论。这里有几种不同的选择

  1. 我们可以什么都不做。新的评论将会在读者刷新页面后显示出来。
  2. 从JavaScript角度,我们可以定期“轮询”服务器端的网络应用(例如,每30秒一次)以获取和加载任何新的评论(如果有)。
  3. 从PHP角度,我们在数据库中存储每个新评论时,都会广播一个事件并将数据推向JavaScript。

正如您所猜想的,第三种方法为读者提供了最实时的数据,并防止我们即使没有添加任何新的评论也要定期轮询服务器。

因此,为了订阅频道并监听通过WebSockets广播的特定事件,我们可以使用Laravel Echo。您当然可以编写用于与WebSockets交互的代码,但使用Echo可以为您节省大量的时间和精力。

我需要这个吗?

如果您正在构建可能需要显示实时数据的Laravel应用程序,我肯定会推荐您查看Echo。

对我个人而言,作为一个不喜欢与JavaScript打交道,更喜欢用PHP工作的人,我发现这个库非常容易设置和使用。

5. Horizon

Horizon 是一个允许您使用提供的仪表盘运行和监控队列的包。使用Horizon的主要优点是您可以全面了解应用程序的队列,确保一切按预期运行。如果您的任何任务、监听器、通知或其他队列项失败,您可以在Horizon上检查以获取更多错误信息,并开始调试。

我需要这个吗?

在我看来,如果我打算在我的项目中使用队列,我相信Horizon是一个非常有用的包。即使您不想在您系统的实际版本上运行队列,它也可以在本地开发期间作为一个非常有用的调试工具。

6. Jetstream

Jetstream 可能是我最喜欢的Laravel包。它是一个起始包,它提供了类似于Breeze的认证功能,以及两步验证、会话管理、团队管理以及用户的个人资料页面。

如果您打算构建需要这些功能的应用程序,它可能需要您几天、几周或甚至几个月(如果您是Web开发的初学者)的时间。但是,使用Jetstream,您可以在没有任何额外费用的情况下获得所有这些功能,并且您可以在几分钟内将一个基本版本安装到您的新Laravel应用程序中。

与Breeze类似,Jetstream有两大版本:Livewire & Blade和Vue & Inertia。这两个版本都提供了使用Tailwind CSS提供的样式。这意味着您可以选择您更喜欢的手架,根据需要更改配置文件,然后您就可以非常快速地构建应用程序。

我需要这个吗?

如果您正在构建一个需要Laravel提供的任何功能的应用程序,我强烈建议您考虑使用Jetstream。它不仅仅是提供像Breeze一样的认证功能,它还能为您的系统提供一个更加强大和功能丰富的起点。

然而,如果您不需要Jetstream提供的所有额外功能,您可能更适合选择Breeze。就我个人而言,如果我是Laravel的新手,我可能会下载Jetstream来看看它能提供哪些可能性。但在我还是有点不适应构建应用之前,我可能会使用Breeze。Jetstream有一个轻微的,额外的学习曲线,因为您可能需要了解如何使用Livewire或Inertia(基于Vue)。虽然您不一定需要知道如何使用它们,但如果您想自定义提供的默认UI,了解它们会很有用。但是,一旦您对Livewire和Inertia玩上几次,它们相对来说都比较容易理解,所以如果您愿意挑战,深入使用它们可能会有所裨益。

7. Mix

Laravel Mix 是由 Jeffrey Way(Laracasts的创始人)开发的一个JavaScript包,它使得与 Webpack 的协作变得极为简单。如果您是网站开发的新手,您可能不知道通常需要“构建”您的JavaScript和CSS资源,以便让您的站点和应用准备好生产环境。例如,您可能想要压缩您的JavaScript和CSS文件,以减小文件大小并快速加载以供用户使用。为此,您可以使用如Webpack这样的包。

但是,使用Webpack可能会相当复杂且难以理解;尤其是如果您不经常查看或更新Webpack配置文件。Mix允许您以更简单、更易于维护和阅读的方式编写配置文件。

实际上,我确实在我的所有项目中都使用了Mix。不要被这个名字迷惑;您可以在非Laravel项目中使用Mix。默认情况下,它在您的Laravel应用程序中已安装,但如果您想在其他项目中安装它,文档中有一些很容易遵循的说明。

我需要这个吗?

除非您是Webpack的老手或有使用不同系统构建资源的意思,否则我强烈建议使用Mix。只需要两到三行配置,您就可以开始编译和压缩您JavaScript和CSS资源,而不必了解Webpack底层是如何工作的。

当然,如果您对Webpack有更多经验并希望有更细粒度的控制,您可能会选择不使用它。然而,在我作为全球范围内的Laravel网络开发者期间工作的所有项目中,他们都一直使用Laravel Mix。

8. Nova

Nova 是一个付费软件包,为您的Laravel应用程序提供一个管理面板。它允许您将管理功能添加到项目中,这些项目可能并不需要传统的完整CMS(内容管理系统)。

例如,我实际上使用Nova在我的网站上撰写所有的博客文章。它为我提供了一个轻量级且可定制的仪表板,我可以通过它轻松地创建和编辑我的博客文章。我甚至在一些客户的网站上使用它来显示他们的联系表单提交和更改网页上的文本。

我甚至看到在商业环境中使用的完整应用程序都是纯Nova构建的,所以如果需要,它可以很好地扩展。

我需要这个吗?

如果您正在构建一个需要管理仪表板的项目或网站,以便您(或其他人)可以编辑公共网站的部分内容,那么Nova绝对很有用。然而,我认为Nova并非必需品,市面上还有其他选择,例如自己构建管理功能(如果不需要太复杂),或者使用类似的CMS(内容管理系统)如FilamentOctober CMS

不过,如果我要从头开始重建我的网站,我肯定会再次选择Nova,因为它为我节省了大量的时间,而且我非常喜欢它下载后的快速设置过程。

9. Octane

Octane是一个可以通过使用Open SwooleSwooleRoadRunner来显著提高应用程序性能的包。正如文档中提到的,“Octane启动应用程序一次,将其保留在内存中,然后以超音速速度向其提供请求”。

我从未在我的任何项目中使用过Octane,因此无法对设置或使用的简便性提供太多意见。然而,我听说其他开发者在他们的项目中使用了Octane并看到了一些惊人的性能提升。

我需要这个吗?

从个人角度看,如果您刚开始从事Web开发,可能现在还不需要考虑Octane。将来,如果您开始从事高性能或时间至关重要的项目,您可能需要考虑它。

10. Sail

Sail是一个用于与Docker开发环境交互的命令行界面。您可以使用它,在几分钟内将您的Laravel应用程序与PHP、MySQL、Redis、Mailhog以及其他服务运行起来。

如果您不太熟悉使用Docker,Sail可以是一个为在您的机器上设置开发环境的好起点。但是,您需要确保不要在生产环境中使用它,因为它并没有针对那种类型的环境进行优化。

实际上,我使用Sail来设置自己的项目并在本地运行它们。我最喜欢的方面之一就是,从运行安装命令到在我的浏览器中运行网站,速度有多快。我无需使用Docker的经验或知识,也不需要花大量时间阅读指南来让它全部工作;它只需工作即可。

我需要这个吗?

如果您正在开始Web开发,我可能建议您使用Laravel Sail,这样您就可以快速在您的机器上运行Laravel应用程序。如果您将来决定Sail不适合您,而您更愿意构建自己的Docker镜像或使用不同的开发环境(如Valet),那么您可以快速将其从项目移除。本质上,Sail只是一些存放在项目根目录中的文件,所以如果您不喜欢它,您可以很容易地删除它们。

如果您正在设置一个新的Laravel应用程序,使用Sail会更加方便,因为它实际上是默认安装的。您只需运行安装命令即可完成设置。

11. Sanctum

Sanctum是一个轻量级的包,您可以使用它为基于令牌的API、移动应用和单页面应用(SPA)添加身份验证。就像所有其他包一样,设置非常简单,您可以非常快速地设置某种形式的身份验证。

我过去在项目中使用过Sanctum来进行API开发,我发现它非常有用,因为它允许你给令牌添加“能力”。例如,设想一下你的系统可以用来创建和编辑用户。如果一个用户想要创建一个只有更新用户权限但没有创建权限的令牌,他们可以在能力中定义这一点。这意味着你可以为你的令牌定义粒度控制和授权。在一些项目中,这并不是必需的。然而,有时候这个包非常酷,因为它可以减少我们构建API认证所需要花费的时间。

我需要这个吗?

如果你正在构建一个包含API的项目,我认为使用Sanctum会给你带来巨大的好处。同样,我也认为如果你正在构建SPA或移动应用,使用它也会有好处。然而,如果你没有做任何这些,你可能并不一定需要Sanctum,也许最好依赖像Breeze或Jetstream等提供的认证方法。

12. Scout

Scout是一个可以帮助你在Laravel应用程序中添加搜索功能的包。你可以使用它来实现全文本搜索,包括AlgoliaMeiliSearch和MySQL/PostgreSQL驱动。

类似于Octane,我实际上从未使用过这个包,所以无法提供大量信息。然而,根据我从其他开发者那里听到的,当你在数据库中有大量数据需要搜索时,Scout可以是一个非常方便的包。例如,你可能想使用Scout在你的项目或网站中实现全局搜索。

我需要这个吗?

我个人认为,如果你是初学Web开发,可能不需要检查Scout。然而,我确实认为,如果你正在考虑为代码添加可能需要快速运行搜索的情况,这将是一个值得一看的东西。

13. Socialite

Socialite是一个非常酷的包,可以让您与OAuth提供者通信以对用户进行认证。例如,您不必使用传统登录表单,您可以为用户提供使用Facebook、Twitter、LinkedIn、Google、GitHub、GitLab和Bitbucket进行登录的功能。

这在你想要使项目的注册和登录过程流线化时非常有用。事实上,在我当前的项目中,我添加了使用GitHub、Bitbucket或Google登录的功能。我对这一切如此简单易用并且一切都能很好地连接在一起感到非常高兴。

我需要这个吗?

我并不一定说Socialite是你刚开始Web开发或Laravel时需要关注的。但是,如果你想通过在Laravel中进行一个小项目来沉浸其中,我认为使用Socialite设置一个模拟登录表单并用它来使用OAuth提供者进行登录会很有趣。或者,如果你正在考虑为应用程序添加OAuth登录,你也可以自己添加实现此功能的逻辑。但通过使用Socialite,这一切都会简单得多,并且可以防止你需要编写处理OAuth请求的代码。

14. Telescope

Telescope 是一个你可以添加到 Laravel 应用程序的扩展包,用于查看应用的大部分信息。正如文档中提到的,它“提供了对进入你应用请求、异常、日志条目、数据库查询、延迟作业、邮件、通知、缓存操作、计划任务、变量转储等多方面的洞察。”。

实际上,Telescope 是我在每个新 Laravel 项目开始时首先安装的东西之一。我喜欢它展示的关于我系统的大量数据,以及它给我的洞察力。

Telescope非常好的一个特性是它安装非常简单,你甚至可以在预发布服务器上安装它,以便在调试错误或准备新版本部署时获得更多信息。不过,如果你想在预发布或生产服务器上提供Telescope,那么确保它不被公众访问是很重要的。

我需要这个吗?

据我所知,我推荐所有刚刚开始使用 Laravel 的新用户使用 Telescope。我认为它为你提供了非常有用的应用洞察,并可以帮助你了解 Laravel 中的某些功能。

15. Valet

Valet 是另一个为 MacOS 用户构建的本地开发环境(类似于 Sail),它配置了你的机器上的 Nginx 和 DnsMasq,从而使得通过浏览器访问你的项目变得更加容易。

你不能完全将 Valet 用作 Sail 的替代品,因为它不包括 Sail 提供的所有附加功能,例如数据库、Redis 或 Mailhog。然而,如果你愿意花些时间在你的机器上自行设置这些可选的附加功能,那么 Valet 是一个好选择。它是极简的,所以它不会使用大量的 RAM,与 Sail 等相比运行得非常快。

实际上,如果我不总是需要 Sail 的可选附加功能,我喜欢用 Valet 来设置我的网站。

文档提供了一些非常好的设置 Valet 的说明,这样你就可以立即开始构建你的应用程序。

我需要这个吗?

在我看来,如果你使用的是 Mac 且不需要 Sail 的所有附加功能,我强烈推荐使用 Valet。我认为它是一个出色的本地开发环境,为项目提供了一个不错的起点。

结论

希望这篇帖子能给你一个关于 Laravel 生态系统和可用的不同第一方服务/扩展包的简要概述。

继续创建酷炫的东西!🚀

上次更新 1 年前。

ash-jc-allen, driesvints, tvbeek, nf11, joedixon, fuzenco, iamjuney, rajoyish, jdavidfigue, james-wong123 等人喜欢这篇文章

21
喜欢这篇文章吗?通过点赞告诉作者!
ash-jc-allen (Ash Allen) 我是一位来自英国普雷斯顿的独立 Laravel 网络开发者。我维护 Ash Allen Design 博客,并参与了许多酷炫和令人兴奋的项目 🚀

你可能还会喜欢以下文章

如何使用Larastan将你的Laravel应用程序从0提升到9

在Laravel应用程序执行之前发现错误是可能的,感谢Larastan...

阅读文章

无特性规范API响应

我注意到大多数创建用于API响应的库都使用特性和...

阅读文章

在你的Laravel项目中通过Discord通知收集反馈

如何在Laravel项目中创建一个反馈模块并在收到消息时接收Discord通知...

阅读文章

我们想感谢以下这些令人惊叹的公司对我们的支持

您的标志在哪里?

Laravel.io

Laravel问题解决、知识共享和社区建设的门户。

Laravel.io

社交

社区

© 2024 Laravel.io - 版权所有。