当前位置:首页 > VUE

vue配合实现ssr

2026-03-29 16:35:03VUE

Vue 实现 SSR 的基本原理

Vue 的 SSR(Server-Side Rendering)依赖于 vue-server-renderer 包。核心原理是将 Vue 组件在服务器端渲染为 HTML 字符串,直接发送给客户端,从而提升首屏加载速度和 SEO 友好性。

实现步骤

安装依赖 需要同时安装 vuevue-server-renderer 和服务器框架(如 express):

npm install vue vue-server-renderer express

创建 Vue 实例 定义一个通用的 Vue 实例工厂函数,避免状态单例污染:

// app.js
import Vue from 'vue';
import App from './App.vue';

export function createApp() {
  const app = new Vue({
    render: h => h(App)
  });
  return { app };
}

服务器端入口 使用 vue-server-renderercreateRenderer 生成 HTML:

// server.js
const express = require('express');
const { createRenderer } = require('vue-server-renderer');
const { createApp } = require('./app');

const server = express();
const renderer = createRenderer();

server.get('*', async (req, res) => {
  const { app } = createApp();
  const html = await renderer.renderToString(app);
  res.send(`
    <!DOCTYPE html>
    <html>
      <head><title>Vue SSR</title></head>
      <body>${html}</body>
    </html>
  `);
});

server.listen(3000);

客户端激活(Hydration)

为了使交互生效,需在客户端挂载相同的 Vue 实例:

// client.js
import { createApp } from './app';

const { app } = createApp();
app.$mount('#app');

HTML 模板中需包含客户端脚本

vue配合实现ssr

<body>
  <!--vue-ssr-outlet-->
  <script src="/client.js"></script>
</body>

构建配置

服务器端打包 需配置 Webpack 的 target: 'node'externals

// webpack.server.config.js
module.exports = {
  target: 'node',
  externals: [require('webpack-node-externals')()],
  output: {
    libraryTarget: 'commonjs2'
  }
};

客户端打包 与普通 Vue 项目配置一致,注意区分入口文件。

数据预取

使用 asyncData 方法或 Vuex 在渲染前获取数据:

vue配合实现ssr

// 组件内定义
export default {
  asyncData({ store }) {
    return store.dispatch('fetchData');
  }
};

服务器端需在渲染前调用

const matchedComponents = router.getMatchedComponents();
await Promise.all(
  matchedComponents.map(Component => {
    if (Component.asyncData) {
      return Component.asyncData(store);
    }
  })
);

常见问题解决

避免状态单例 所有请求应创建新的 Vue 实例、Router 和 Store 实例。

客户端激活失败 确保服务器渲染的 HTML 与客户端生成的 DOM 结构完全一致。

路由处理 使用 vue-routercreateRouter 方法,服务器端需根据 URL 匹配路由。

通过以上步骤,可以实现基本的 Vue SSR 应用。对于复杂场景,建议使用 Nuxt.js 等封装好的解决方案。

标签: vuessr
分享给朋友:

相关文章

vue实现选中单元格

vue实现选中单元格

Vue 实现选中单元格的方法 基础实现思路 在 Vue 中实现选中单元格功能,通常可以通过动态绑定 class 或 style 来实现。以下是一个基于表格的简单实现示例: <template&…

vue element实现

vue element实现

Vue Element UI 实现 Vue Element UI 是基于 Vue.js 的组件库,提供丰富的 UI 组件,适合快速开发企业级中后台产品。以下是一些关键实现方法和步骤: 安装 Vue…

vue实现sso

vue实现sso

Vue 实现 SSO(单点登录)方案 单点登录(SSO)允许用户通过一次登录访问多个相关系统。以下是基于 Vue 的实现方案: 使用 OAuth2/OpenID Connect 协议 OAuth2…

vue实现报表

vue实现报表

vue实现报表的方法 使用Vue实现报表通常需要结合图表库或表格组件。以下是几种常见方法: 使用ECharts 安装ECharts库: npm install echarts vue-echart…

vue实现节流

vue实现节流

vue实现节流的方法 在Vue中实现节流(throttle)功能,通常用于限制高频事件的触发频率,例如滚动、输入或按钮点击。以下是几种常见的实现方式: 使用Lodash的throttle函数 安装L…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…