当前位置:首页 > VUE

vue的ssr怎么实现

2026-01-23 10:49:42VUE

Vue SSR 实现方法

Vue 的服务器端渲染(SSR)可以通过以下步骤实现,确保应用在服务器端生成 HTML 并发送到客户端,提升首屏加载速度和 SEO 友好性。

基础配置

安装 vue-server-rendererexpress 作为基础依赖:

npm install vue-server-renderer express

创建一个基本的服务器入口文件(如 server.js),配置 Express 和 Vue SSR:

const express = require('express')
const { createBundleRenderer } = require('vue-server-renderer')
const server = express()

// 读取生成的 SSR 打包文件
const renderer = createBundleRenderer(require('./dist/vue-ssr-server-bundle.json'), {
  template: require('fs').readFileSync('./index.template.html', 'utf-8')
})

server.get('*', (req, res) => {
  renderer.renderToString({ url: req.url }, (err, html) => {
    if (err) res.status(500).end('Internal Server Error')
    res.end(html)
  })
})

server.listen(8080)

客户端与服务器端入口

创建客户端入口文件(client-entry.js):

import { createApp } from './app'

const app = createApp()
app.$mount('#app')

创建服务器端入口文件(server-entry.js):

import { createApp } from './app'

export default context => {
  const { app } = createApp()
  return app
}

Webpack 配置

配置客户端和服务器的 Webpack 构建文件。示例配置片段:

// webpack.client.config.js
module.exports = {
  entry: './client-entry.js',
  output: {
    filename: 'client-bundle.js'
  }
}

// webpack.server.config.js
module.exports = {
  entry: './server-entry.js',
  target: 'node',
  output: {
    filename: 'server-bundle.js',
    libraryTarget: 'commonjs2'
  }
}

生成打包文件

运行 Webpack 生成客户端和服务端打包文件:

webpack --config webpack.client.config.js
webpack --config webpack.server.config.js

数据预取与状态同步

在服务器端预取数据并同步到客户端:

// server-entry.js
export default async context => {
  const { app, store } = createApp()
  await store.dispatch('fetchData')
  context.state = store.state
  return app
}

在客户端入口中恢复状态:

if (window.__INITIAL_STATE__) {
  store.replaceState(window.__INITIAL_STATE__)
}

模板文件

创建 HTML 模板文件(index.template.html),包含占位符:

vue的ssr怎么实现

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Vue SSR</title>
</head>
<body>
  <!--vue-ssr-outlet-->
</body>
</html>

注意事项

  • 避免在服务器端渲染生命周期钩子(如 beforeCreatecreated)中使用浏览器特有的 API。
  • 使用 vuex 管理共享状态,确保服务器端和客户端状态一致。
  • 对于异步路由,需配合 vue-routerrouter.onReady 方法处理。

通过以上步骤,可以构建一个基本的 Vue SSR 应用。实际项目中可能需要进一步优化构建配置和错误处理。

标签: vuessr
分享给朋友:

相关文章

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncComp…

vue实现管道

vue实现管道

Vue 中实现管道(Pipe)功能 在 Vue 中可以通过过滤器(Filters)或计算属性(Computed Properties)实现类似管道的功能,将数据经过多个处理步骤后输出。 使用过滤器(…

vue实现频道

vue实现频道

Vue实现频道功能的方法 使用Vue Router动态路由 通过Vue Router的动态路由功能可以轻松实现频道切换。在路由配置中定义动态参数,组件内通过this.$route.params获取当前…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas 绘制…

vue实现dag

vue实现dag

Vue实现DAG(有向无环图) 在Vue中实现DAG(Directed Acyclic Graph,有向无环图)通常涉及数据结构的建模、可视化渲染以及交互逻辑处理。以下是关键实现步骤和示例代码: 数…

vue实现发帖

vue实现发帖

使用 Vue 实现发帖功能 前端实现 创建发帖表单组件,包含标题和内容输入框,以及提交按钮。使用 v-model 绑定表单数据。 <template> <div>…