当前位置:首页 > 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):

vue的ssr怎么实现

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 生成客户端和服务端打包文件:

vue的ssr怎么实现

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>

注意事项

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

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

标签: vuessr
分享给朋友:

相关文章

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debou…

vue实现继承语法糖

vue实现继承语法糖

在Vue中实现继承可以通过多种方式模拟类继承的效果,以下是常见的几种方法: 使用mixins实现逻辑复用 通过Vue的mixins机制共享组件选项,达到类似继承的效果: const Bas…

vue实现录音文件播放

vue实现录音文件播放

使用 Vue 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <…

vue组件实现

vue组件实现

Vue 组件实现基础 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。组件的实现包括定义、注册、数据传递和生命周期管理等。 定义组件 组件可以通过单文件组件(.…

vue 实现豆瓣

vue 实现豆瓣

以下是基于 Vue 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配合…