vue ssr服务器端渲染指南

文章发布于 2023-09-04

Vue 服务器端渲染(SSR)是一种将 Vue 应用程序在服务器上预渲染成 HTML,然后将其发送到客户端的技术。这可以提高首次加载性能、搜索引擎优化(SEO)以及对于一些无法执行 JavaScript 的环境的支持。以下是使用 Vue 进行服务器端渲染的指南:

创建 Vue 项目

首先,您需要有一个 Vue 项目。您可以使用 Vue CLI 来创建一个新的项目:

npm install -g @vue/cli
vue create my-ssr-app

在创建项目时,选择 "Manually select features" 并确保选择 "SSR"。

理解服务器端渲染的入口文件

在 Vue 服务器端渲染中,有两个入口文件:一个用于客户端,一个用于服务器端。默认情况下,Vue CLI 会为您生成这两个入口文件:src/entry-client.jssrc/entry-server.js

  • entry-client.js:客户端入口文件,在浏览器中运行,负责挂载 Vue 应用程序。
  • entry-server.js:服务器端入口文件,用于服务器端渲染,导出一个创建 Vue 实例的函数。

编写服务器端入口文件

src/entry-server.js 中,您需要导出一个函数,用于创建 Vue 实例并返回。

import { createApp } from './main';
export default context => {
  return new Promise((resolve, reject) => {
    const { app, router } = createApp();

    // 设置服务器端路由
    router.push(context.url);

    router.onReady(() => {
      // 获取当前路由匹配的组件
      const matchedComponents = router.getMatchedComponents();

      // 如果没有匹配的组件,返回 404
      if (!matchedComponents.length) {
        return reject({ code: 404 });
      }

      // 解析组件的异步数据
      Promise.all(
        matchedComponents.map(component => {
          if (component.asyncData) {
            return component.asyncData({ store });
          }
        })
      ).then(() => {
        context.state = store.state;
        resolve(app);
      });
    }, reject);
  });
};

修改客户端入口文件

src/entry-client.js 中,您需要挂载 Vue 应用程序到 DOM 元素上。

import { createApp } from './main';

const { app, router } = createApp();

router.onReady(() => {
  app.$mount('#app');
});

创建服务器端路由和状态管理

在服务器端渲染中,您可能需要考虑路由和状态管理的同步。您可以使用 Vue Router 和 Vuex 来实现这些功能。确保在服务器端和客户端都能访问到相同的状态。

配置服务器

根据您选择的服务器,您需要在服务器上配置一些设置,例如 Express、Koa 等。配置需要将请求的 URL 传递给服务器端入口文件,让它生成一个 Vue 实例并返回渲染好的 HTML。

运行服务器

在服务器配置好后,您可以运行服务器来处理请求并渲染 Vue 应用程序。运行以下命令启动服务器:

node server.js

请注意,上述步骤仅为简要指南。Vue 服务器端渲染涉及许多细节和配置,具体实现可能因项目需求和技术选择而有所不同。如果您对服务器端渲染有更深入的兴趣,建议查阅 Vue 官方文档中关于服务器端渲染的详细指南。