嘿那里!在开始之前请注意...我已经很长时间没有写信了。多年来我一直威胁要这样做,最后我发现这是一个很好的话题。我有点生疏,但会努力坚持下去,希望能有所进步。
EventPress 可能是我所做的最重要的事情。我从一开始就参与其中,该应用程序在过去 10 年中经历了 3 个主要版本,呈指数级增长。版本 4 现已发布,在我们处理它的过程中我想更改一些更改。
首先,介绍一点历史。 EventPress 归 HotPress Media 所有,之所以成立是因为客户需要一个简单的解决方案来管理事件 RSVP,以取代他们的 Excel 电子表格。 EventPress 的第一个版本很丑陋。没有规范,我们在没有适当计划的情况下运行了该项目,最终得到了一大碗意大利面条。但它奏效了,并帮助我们踏入了南非最大的公司之一的大门。
版本 2 是一个巨大的飞跃。我们在接口方式上没有太大的改变,但是底层框架却发生了很大的变化。 EventPress 被迁移到 Laravel(当时的版本 5),尽管版本 1 中的很多代码都转移到了版本 2,但结构要好得多,我们遇到的问题也少得多。那时我们仍然没有任何类型的测试套件,我们基本上是在“它可以在我的机器上运行”的基础上进行测试。不太好。
版本 3 对 UI 进行了彻底修改,Tailwind 成为首选 CSS 框架。尽管仍然有相当多的版本 1 代码隐藏在黑暗的角落,但大量代码已被更改。第 3 版的一个重大变化是全新的分发系统。在此过渡期间,我们学到了很多有关发送群发邮件的知识。
许多面向公众的 UI 都是版本 2 的直接副本。即使现在,与会者看到的大部分内容仍然是版本 2 的代码。相反,版本 3 为代码库带来了更多的结构。某种逻辑开始出现。我们编写了瘦控制器并严重依赖服务容器。版本 3 也是 EventPress 第一个带有测试套件的版本。
我编写 PHP 代码已经很长时间了,但我是自学的。 EventPress 就像被扔进了深渊,没有任何关于如何游泳的指导。这是一个巨大的学习曲线,但它让我达到了今天的水平。我自己构建了这个东西,其他开发人员的投入很少。
这一次,我将通过博客记录 EventPress 4 的开发过程。不是因为我要寻求认可,而是因为我想把这一次记录下来。也许我的解决方案可以帮助其他独立开发人员。我学到了很多关于构建和运行大型 PHP 应用程序的知识。
EventPress 4 将进行大规模重写。尽管大量 EventPress 3 代码最终会出现在版本 4 中,但它不仅仅是复制粘贴。我觉得是时候最终摆脱自版本 1 以来一直存在的所有陈旧内容了;我想要一个更强大的测试套件;我想利用一些更新的技术。
我的计划是在解决这个问题时每月至少写一次东西。我会努力强迫自己坚持下去。
所以首先,投入战斗......
EventPress 4 将不会获得新的 UI。我们将使用版本 3 中的几乎所有界面,并且可能只是进行一些细微的更改。 EventPress 的 UI 是使用 Vue 3 和 Tailwind 构建的,而 Inertia 是我们选择的粘合剂。
EventPress 4 将是版本 3 的一对一功能副本。这意味着随着版本 3 在未来几个月内不断发展,版本 4 也需要随之发展。不过,目前还只是一些计划。
首先,我研究了版本 3 仍在努力的地方,并就如何在版本 4 中改进这些元素做了一些笔记。我已经建立了一个关于如何构建此版本的想法事件出版社。有一些熟悉的东西和一些全新的东西:
我知道其中有一些有趣的选择。辛烷值对我们来说很重要,因为我们以前从未使用过类似的东西。 Octane 是 Laravel 的第一方包,可帮助您在 PHP 应用程序服务器上运行应用程序。支持 Swoole、RoadRunner 和 FrankenPHP。我们研究了所有三个选项,并暂时决定使用 FrankenPHP。它比其他两个更新,但提供了非常好的性能。 Swoole 提供了并发工作线程,这很好,但不是我们认为自己需要的。然而,问题在于它需要安装 Swoole 扩展。这不是我们期望企业客户做的事情。我也有一些使用 FrankenPHP 的经验,所以这是有道理的。
我们已经使用 Nginx 多年了。它太棒了,我强烈推荐它。然而,FrankenPHP 附带了它自己的 Caddy 服务器,因此我们也在对此进行试验。我们可能不会坚持使用 Caddy,但现在,它在列表中。
PHP 8.4 尚未发布,但由于 EventPress 4 暂时不会发布,因此我们开始使用最新版本是有意义的。截至撰写本文时,PHP 8.4 距离发布还有大约一个月的时间,因此我们正在使用最新的候选版本。
InertiaJS 2 的情况大致相同。它也处于测试阶段,但由于我们距离发布还有很长的路要走,它可能会在 EventPress 之前很久就发布。此外,我们在 BETA 版本中运行了 InertiaJS 1 很长时间,没有出现任何问题。
我是最近的静态分析转换者。我用得最多的是 PHPStorm 为我提供的我编码的东西。对于 EventPress 4,我们决定全力以赴,将 PHPStan 纳入其中。 PHPStan 是 PHP 的第三方静态分析器。它的配置非常简单,并帮助我消除了许多其他项目中的一些错误。
基于 EventPress 的大小,这在这里也很有意义。为了完成这项工作,我添加了一个 test:types Composer 脚本,我可以随时运行该脚本,并将其添加到 CI 脚本中。
我从未运行过 PHP 代码 linter。我使用过 PHP Mess Detector 几次,但从未真正投入其中。对于 EventPress 4,我们决定使用 linter 来帮助保持代码整洁和一致。我们选择了 Laravel 自己的“Pint”,它实际上只是 PHP-CS-Fixer 的包装器,并提供了一种非常简单的方法来保持代码整洁。再次,我添加了 lint 和 test:lint Composer 脚本以使其更易于运行。
在开发过程中我在 Mac 和 Linux 机器上工作。我的办公桌上有一台 M1 Max,已经用了好几年了,办公室里还散布着几台 Linux 机器。我的主要驱动程序是 Mac,我的大部分开发工作都是在 Mac 上进行的,但我的所有代码都在 Linux 机器上运行。通常是 Ubuntu 服务器。
EventPress 4 为这个难题添加了一些新的部分,但我认为在大多数情况下我可以继续按照目前的方式进行开发。我使用 Homebrew 安装大部分工具,使用 Laravel Valet 运行本地开发环境。我不是 Laravel Herd 用户(这很好,但我更像是 Herd Pro 用户,我无法证明每年花费 99 美元购买一个可以完成我已经可以做的所有事情的工具,只是速度更快一点,并且包含在一个漂亮的用户界面)。
所以我的计划是在我的本地计算机上运行一个使用 MySQL 数据库运行的 eventpress4.test 域。我将在早期开发过程中使用此状态一段时间,并每隔几天左右使用 Octane 进行一些测试。一旦我们完成了早期部分,我们将开始更频繁地使用 Octane 进行开发。我们将托管一个运行该应用程序的测试服务器,因为我们希望它在生产中运行。
EventPress 从未被容器化。然而,EventPress 4 很可能会走这条路。我们仍在尝试一些事情,但我们已经与一些企业客户进行了交谈,我们认为这将有助于使他们的部署过程变得更加容易。我们在 Docker 容器中运行 EventPress 3 进行了一些早期测试,我们认为这对于未来所有 EventPress 版本来说都是正确的举措。
多年来,我们一直严重依赖 GitLab 作为我们选择的 CI/CD 服务。 GitLab 运行许多复杂的 CI 管道,并为我从事的几乎每个项目进行部署。
不过,我也已经是 GitHub 用户很多年了。我主要将它用于我的开源工作,但最近开始将一些较小的项目转移到付费 GitHub 帐户,这给我留下了深刻的印象。有一些事情与 GitLab 的工作方式非常不同,但在大多数方面我真的很高兴。
因此,EventPress 4 代码将托管在 GitHub 上,我们将使用 Actions for 或 CI 管道以及所有部署。
我想这篇文章就到此为止了。仍有一些计划需要完成,但我已经开始编写一些代码并编写一些测试。我已经有了一个基本的身份验证层(感谢 Laravel),尽管其中大部分与 EventPress 3 类似。我将在下一个中展示一些代码。答应我!
以上是构建事件新闻第 1 部分的详细内容。更多信息请关注PHP中文网其他相关文章!