【问题标题】:How to implement angular server side rendering in laravel?如何在 laravel 中实现角度服务器端渲染?
【发布时间】:2018-09-09 20:59:54
【问题描述】:

我使用 angular 5 创建了一个单页应用程序。我将此应用程序与 laravel 后端一起使用。在 laravel 项目中,我有一个 angular 文件夹,该文件夹存储所有 angular 文件。我在 angular 文件夹之外构建了 angular 应用程序,位于根 laravel 项目文件夹的公共文件夹中。我设置了 web.php 文件,所以如果我去 homestead.test url,index.html 将从公共文件夹加载。在使用stories universal rendering 设置服务器端渲染后,我构建了客户端应用程序和服务器包。在我这样做之后,在浏览器中访问 homestead.test,我看到我的应用程序看起来不像以前了。使用正常的 ng 构建(顺便说一下,我是匈牙利人,所以我使用了匈牙利语): 在我完成了 universan 渲染构建(ng build --prod --extract-cssng build --prod --extract-css --app 1 --output-hashing=false ,我使用了 --extract-css,因为我在 angular 中使用了 scss,当我不使用它时,我收到了很多警告): 当我查看页面源时,它看起来像原始的角度源,但在快速服务器中,源显示的是真实内容。 所以我的问题是如何设置 laravel 来充当快递服务器? ng build --prod --extract-css 创建了很多js文件,assets文件夹和其他一些文件,但是ng build只创建了一部分,没有assets文件夹。那么如何在 laravel 中导入所有 assets 文件夹和 js 文件呢?故事通用渲染也从 Node server.ts 创建了一个 server.js 文件。我不知道这个文件在 laravel 中是必需的。

我还有一些令人上瘾的问题: 将 laravel 连接到 Angular 应用程序的最佳方式是什么?如果是,我可以使用真正的虚拟主机托管它吗? 有没有免费的虚拟主机来测试我的应用程序? 如果我像使用 express 服务器一样在 laravel 中成功显示 angular 应用程序,那么在任何 url 中刷新页面都可以吗?因为现在我收到一条错误消息。

我将此应用程序创建为我大学的论文应用程序,并且我在网络上没有主机应用程序,我只使用本地主机。

【问题讨论】:

  • 当然需要server.js。您需要在服务器端运行 JS 应用程序。 PHP 无法运行 JS。所以你需要 Node.js+Express 来运行服务器端的 Angular。如果你的后端由 PHP+Laravel 提供支持,你需要将所有相关请求代理到该服务器。据我所知,PHP 桥已经计划好了,但还没有准备好,所以你自己在这里。
  • 如果您想了解 Angular 的服务器端渲染,您可以通过此链接获得帮助 - blog.squareboat.com/…

标签: angular laravel angular5 server-side-rendering angular-universal


【解决方案1】:

Angular Universal 的想法是在服务器端运行 javascript 以在服务器端生成页面。当然,使用 Node(Express JS)很容易,因此已经存在。

关于 PHP 上的 Angular Universal,你可以关注这个Github issue。我的理解是,至少在今天,没有支持。但确实很多人都想得到支持,而且很可能未来还会有支持。

目前,您有以下选择:

  1. 您可以继续按照现在的方式做事,并且可以在任何托管平台上托管应用程序。虽然,您可能应该改进您的构建机制,以消除在 Laraval 中复制 angular 文件的手动干预。您的构建机制应该完成所有这些复制操作。该方法的缺点是您不会获得 Angular Universal 提供的服务器端渲染的好处。但是,如果您不关心页面加载速度和 SEO 等好处,那就很好。
  2. 另一种选择是将您的 Angular 部件托管在 Node (Express JS) 中并将所有 API 调用路由到 Laraval。因此,您可以获得 Angular Universal 的好处。这意味着您至少要运行两个进程 - 一个用于 API,另一个用于提供 UI。

根据要求使用这两个选项。对于基于微服务的大型架构,首选第二种方法,因为它使 UI 部分和 API 部分的生命周期独立。

但是,对于用户群较少且您并不真正关心 SEO 的小型项目,第一个选项是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 2017-07-06
    • 1970-01-01
    • 2020-07-08
    • 2018-04-19
    • 2020-11-13
    • 2016-07-03
    • 1970-01-01
    相关资源
    最近更新 更多