Koa2 实战:搭建基于 React 的服务端渲染应用

阅读时长 12 分钟读完

随着前端技术的不断发展,服务端渲染(Server-Side Rendering,SSR)变得越来越流行。与传统的客户端渲染(Client-Side Rendering,CSR)相比,SSR 能够提供更好的 SEO、更快的首屏渲染速度以及更好的用户体验。

在本文中,我们将使用 Koa2 框架和 React 库来搭建一个基于 SSR 的应用,并详细介绍其实现过程和相关技术细节。

环境准备

在开始之前,我们需要先安装 Node.js 和 npm。可以前往 Node.js 官网 下载并安装。

安装完毕后,可以通过以下命令来检查是否安装成功:

接着,我们需要创建一个空的项目目录,并在其中初始化 npm:

安装依赖

接着,我们需要安装一些依赖:

这些依赖分别是:

  • koa:Koa2 框架;
  • koa-router:Koa2 路由;
  • koa-static:Koa2 静态文件服务;
  • koa-bodyparser:Koa2 请求体解析器;
  • react:React 库;
  • react-dom:React DOM 渲染器;
  • react-router-dom:React 路由;
  • react-helmet:React 网页 head 管理;
  • webpack:Webpack 打包工具;
  • webpack-cli:Webpack 命令行工具;
  • webpack-dev-middleware:Webpack 开发中间件;
  • webpack-hot-middleware:Webpack 热更新中间件;
  • babel-loader:Babel 加载器;
  • @babel/core:Babel 核心库;
  • @babel/preset-env:Babel 环境预设;
  • @babel/preset-react:Babel React 预设;
  • @babel/plugin-proposal-class-properties:Babel 类属性插件;
  • @babel/plugin-transform-runtime:Babel 运行时插件;
  • @babel/runtime:Babel 运行时库;
  • nodemon:Node.js 自动重启工具。

目录结构

接着,我们需要创建一些目录和文件:

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

其中,public/ 目录用于存放前端静态文件,src/server/ 目录用于存放服务端代码,src/client/ 目录用于存放前端代码。

配置文件

接着,我们需要配置一些文件。

webpack.config.js

首先是 webpack.config.js 文件:

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

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

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

这个文件主要做了以下事情:

  • 根据环境变量决定是否开启开发模式;
  • 配置入口文件、输出文件和静态文件路径;
  • 配置 Babel 加载器;
  • 配置 HTMLWebpackPlugin 生成 HTML 文件;
  • 配置热更新插件;
  • 配置 Source Map。

.babelrc

接着是 .babelrc 文件:

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

这个文件主要是配置 Babel 的预设和插件。

nodemon.json

最后是 nodemon.json 文件:

这个文件主要是配置 Nodemon 的监视目录和执行命令。

编写代码

有了上面的准备工作,我们就可以开始编写代码了。

服务端

首先是服务端代码,我们需要在 src/server/ 目录下创建以下文件:

index.js

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

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

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

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

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

这个文件主要做了以下事情:

  • 导入 Koa、Koa 路由、Koa 静态文件服务、Koa 请求体解析器、React DOM 渲染器、React 路由、React 网页 head 管理、应用组件和路由配置;
  • 创建 Koa 实例和 Koa 路由实例;
  • 配置路由,使用 React DOM 渲染器将应用组件渲染成 HTML 字符串,使用 React 路由将 HTML 字符串嵌入到网页中,使用 React 网页 head 管理更新网页 head;
  • 使用 Koa 请求体解析器和 Koa 静态文件服务中间件;
  • 启动 Koa 服务器。

App.js

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

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

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

这个文件主要是应用组件,用于渲染路由。

routes.js

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

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

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

这个文件主要是路由配置。

template.js

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

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

这个文件主要是 HTML 模板,用于生成 HTML 文件。

客户端

接着是客户端代码,我们需要在 src/client/ 目录下创建以下文件:

index.js

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

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

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

这个文件主要做了以下事情:

  • 导入 React、React DOM 渲染器、React 路由、应用组件和路由配置;
  • 使用 React DOM 渲染器将应用组件渲染到网页上;
  • 配置热更新。

App.js

同服务端的 App.js

routes.js

同服务端的 routes.js

运行应用

最后,我们可以使用以下命令来运行应用:

这个命令会启动 Webpack 和 Node.js 服务器,并在浏览器中打开 http://localhost:3000

总结

在本文中,我们使用 Koa2 框架和 React 库来搭建了一个基于 SSR 的应用,并详细介绍了其实现过程和相关技术细节。希望这篇文章能够对您有所帮助。

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

纠错
反馈