vue的ssr怎么实现
Vue SSR 实现方法
Vue 的服务器端渲染(SSR)可以通过以下步骤实现,确保应用在服务器端生成 HTML 并发送到客户端,提升首屏加载速度和 SEO 友好性。
基础配置
安装 vue-server-renderer 和 express 作为基础依赖:
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),包含占位符:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue SSR</title>
</head>
<body>
<!--vue-ssr-outlet-->
</body>
</html>
注意事项
- 避免在服务器端渲染生命周期钩子(如
beforeCreate、created)中使用浏览器特有的 API。 - 使用
vuex管理共享状态,确保服务器端和客户端状态一致。 - 对于异步路由,需配合
vue-router的router.onReady方法处理。
通过以上步骤,可以构建一个基本的 Vue SSR 应用。实际项目中可能需要进一步优化构建配置和错误处理。






