如何构建具有服务端渲染的 AngularJS SPA?

阅读时长 7 分钟读完

前言

SPA(Single Page Application)是现代 web 应用的主流,它通过 Ajax 技术实现页面的无刷新更新,给用户带来了更流畅的体验。但是,SPA 也带来了一些问题,比如 SEO 不友好、首屏加载慢等。针对这些问题,有一种被广泛提及的解决方案就是服务端渲染(Server Side Rendering,SSR),也就是在服务端渲染出页面,将 HTML 返回给客户端,而不是仅返回一个入口文件,交给浏览器去加载和渲染。

AngularJS 是一个流行的前端框架,也支持 SPA 架构。在本文中,将介绍如何使用 AngularJS 构建一个具有服务端渲染的 SPA。

准备工作

在开始之前,需要安装以下软件:

Node.js 是必须的,AngularJS 是开发服务端渲染的前提,Angular Universal 是一个官方维护的库,提供了服务端渲染的支持。

AngularJS 项目搭建

首先,需要创建一个 AngularJS 项目。可以通过 AngularJS 官网上提供的 快速起步 来创建。

在项目中,可以创建一些页面组件,比如 HomeComponentAboutComponent。这些组件都会被包含在 AppComponent 中,类似于下面这样:

-- -------------------- ---- -------
---- ------------------ ---
---- -------------- ------------------------
  ------ ----- -------
  -----
    -- --------------------------
    -- ----------------------------
  ------
  -------------------
------

其中 ng-view 就是 AngularJS 中的占位符,用于在路由请求改变时展示不同的组件。

服务端渲染配置

使用 Angular Universal 提供的库来实现服务端渲染。首先需要安装依赖:

然后,需要在客户端和服务端上分别创建一个 AppServerModule 模块。这个模块将与 AppModule 模块相关联,并在服务端使用。

-- -------------------- ---- -------
-- --------------------

------ - -------- - ---- ----------------
------ - ------------ - ---- ---------------------------
------ - --------------------- - ---- -------------------------------------------
------ - ------------ - ---- ------------------
------ - --------- - ---- ---------------
------ - ------- ------------ - ---- ------------------

----- ------- ------ - -
  - ----- --- ---------- ------------ --
  -- ----- ---------
--

-----------
  -------- -
    ----------
    -------------
    ----------------------
    ---------------------------- - ------------------ --------- --
  --
  ---------- ---------------
--
------ ----- --------------- --

可以看到,我们在 AppServerModule 中导入了 ServerModuleModuleMapLoaderModule,并在 imports 数组中加入了 AppModuleRouterModule(这里默认加入 AppComponent 组件,如果有其他的路由,也需要在此处添加)。

在服务端,需要创建一个 server.js 文件,启动 Express 服务器,并使用 AppServerModule 作为入口模块。

-- -------------------- ---- -------
-- ---------
----- ------- - -------------------
----- - --------------- - - ---------------------------------------
----- - ------------------------ - - ------------------------------

----- --- - ----------

------------------ -----------------
  ---------- ------------------------
----

------------- -------- --------
---------------- ----------

------------ ----- ---- -- -
  ------------------- -
    ----
    ---
  ---
---

---------------- -- -- -
  ------------------- ------- -- -----------------
---

可以看到,在 server.js 中使用了 ngExpressEngine 来绑定 AppServerModuleNgFactory,并为 Express 设置了渲染视图的引擎。同时,设置了路由规则为 *,即匹配所有路由请求,返回 index.html 页面。

需要注意的是,服务端渲染的入口文件是 index.html 而不是 SPA 中的入口文件 index.html。所以,需要将 SPA 中的入口文件复制一份作为服务端渲染的入口文件,并命名为 static/index.html

构建打包

完成了服务端渲染的配置后,需要对应用进行构建和打包。

先执行 Angular Universal 提供的 generate 命令,生成一些服务端渲染需要用到的文件和模块。

其中 --client-project 指定了客户端项目的名称,默认为 app--name 指定了服务端渲染项目的名称,默认为 server

接着,执行 build:ssr 命令进行构建和打包:

这个命令将会在 dist 目录下生成客户端和服务端两份打包文件。

运行

在打包完成之后,即可通过命令行运行服务端:node server.js 启动 Express 服务器。

如果一切顺利,在浏览器中就可以访问服务端渲染的 AngularJS SPA 了!

总结

本文介绍了如何在 AngularJS 中使用 Angular Universal 实现服务端渲染。服务端渲染的实现和配置需要对 AngularJS 有一定的理解,同时还需要一些 Node.js 的知识。通过服务端渲染,可以提升网站的首屏加载速度,同时增强 SEO 效果。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649d1fc548841e98949d78be

纠错
反馈