首页 > 解决方案 > Laravel + Vue 前端解耦与可选的服务器端 Blade 渲染

问题描述

假设有一个用 Laravel 制作的 CMS。我们将为不同的客户提供相同的 CMS,在我们创建的每个版本上升级他们的 CMS,但有一个配置文件来定义每个客户可用的功能。整个后台(管理面板等)大部分是静态的,并且仅将 Vue 用于某些动态元素。当涉及到后端时,该解决方案适合我们的需求。

但是,我们计划为这些客户端中的每一个部署不同的最终用户前端。解耦这些听起来很简单(创建一个完全独立的前端项目并使用 API 端点来动态获取和渲染所有内容)但是如果我们要完全解耦前端和后端,我们将失去使用 Laravel Blade 渲染静态页面的能力,我们需要由于渲染速度,加载时间,搜索引擎优化等,某些页面的该功能。

主要问题是:如何在不失去使用 Laravel 和 Blade 渲染页面的能力的情况下,将每个客户端的前端与后端解耦,同时保持开发和测试的简单性?

我想到的解决方案之一是创建一个构建后步骤,我们将在其中将特定于客户端的前端文件“合并”到 CMS 中,但这会使开发过程非常困难,甚至几乎不可能开发和测试。

我想到的第二个解决方案是:

  1. 将所有内容保存在一个 Git 存储库中。
  2. 在它自己的分支上开发 CMS,只在那个分支上开发后端和后台的东西,它是孩子。
  3. 为不同的最终用户前端创建单独的分支(将多个项目放在 git 存储库中的最佳实践是什么?也许是这里介绍的一些解决方案?)并仅在这些分支上开发最终用户前端。
  4. 在每个版本上将 CMS 分支合并到客户端分支中。

这个解决方案看起来是可行的,可以让我们使用 Laravel Mix 和服务器端渲染,但它很容易出现人为错误,而且一段时间后我们很难跟踪这些分支。我读过的其他潜在解决方案之一是使用 Git 子模块,但我只是难以理解它是如何工作的,而且它似乎不像在这个用例中那样灵活。

什么才是对我们来说最好的架构解决方案?

标签: phplaravelvue.jsarchitecturefrontend

解决方案


我会将您的 CMS 视为一个包,并将您的不同前端部分视为单独的项目,每个项目都依赖于您的 CMS。例如,我在许多项目中使用 Backpack for Laravel:https ://github.com/Laravel-Backpack/CRUD ,我认为这与您所描述的类似 - 一组通用的核心功能,但没有任何意见前端。

Laravel 包可以注册路由、发布视图和资产、拉入迁移等等——实际上你在 Laravel 应用程序中可以做的任何事情都可以通过 composer 包来完成。

因此,您将采用在构建之间重复的功能,并将其提取到可以通过 composer 需要的“核心”包中。然后前端的东西可以构建在只需要你的核心代码库的项目中。当你更新你的主核心包时,你可以进入每个前端构建并通过 composer 拉入新版本的核心。这将使您有机会将新的核心版本一个接一个地推广到每个项目,确保您可以单独解决问题或适应这些项目的重大更改。

您的核心包还可以包含在您的客户端项目中经常重复使用的任何前端组件,因此理想情况下您不会在前端项目之间重新编写任何代码。

使核心代码足够模块化以成为一个独立的包可能具有挑战性,但我认为根据我对您项目的理解,这是最有意义的。希望能帮助到你。


推荐阅读