当前位置:首页 > 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 模板中需包含客户端脚本

<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 在渲染前获取数据:

// 组件内定义
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

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

标签: vuessr
分享给朋友:

相关文章

vue实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model 指…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要跳…

实现 vue ssr

实现 vue ssr

Vue SSR 实现方法 Vue SSR(Server-Side Rendering)通过服务器端渲染 Vue 应用,提升首屏加载速度和 SEO 友好性。以下是核心实现方法: 基础配置 安装必要依赖…

vue实现tag

vue实现tag

Vue 实现标签(Tag)功能 在 Vue 中实现标签(Tag)功能可以通过多种方式完成,以下是一些常见的方法和实现步骤: 使用动态组件和 v-for 通过 v-for 指令动态渲染标签列表,结合样…

vue实现浮标

vue实现浮标

Vue 实现浮动按钮(浮标) 使用 Vue 实现浮动按钮可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 定位和 Vue 组件 创建 Vue 组件并配合 CSS 固定定位实现浮动按钮:…

vue 实现fadeout

vue 实现fadeout

Vue 实现淡出效果 在 Vue 中实现淡出(fade-out)效果可以通过 CSS 过渡或动画结合 Vue 的动态渲染功能完成。以下是几种常见方法: 使用 Vue 过渡(Transition)组件…