当前位置:首页 > VUE

vue的ssr怎么实现

2026-02-24 01:26:38VUE

Vue SSR 实现方法

Vue 的服务端渲染(SSR)可以通过官方提供的 vue-server-renderer 库实现。以下是核心实现步骤:

安装依赖 需要安装 vuevue-server-rendererexpress(或其他 Node.js 框架):

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 }
}

服务端入口 使用 createRenderer 生成 HTML 字符串:

vue的ssr怎么实现

// server-entry.js
import { createApp } from './app'
import renderer from 'vue-server-renderer'

const renderer = createRenderer()

server.get('*', (req, res) => {
  const { app } = createApp()
  renderer.renderToString(app, (err, html) => {
    if (err) res.status(500).end('Internal Server Error')
    res.end(`
      <!DOCTYPE html>
      <html>
        <head><title>SSR</title></head>
        <body>${html}</body>
      </html>
    `)
  })
})

客户端激活 客户端需要挂载应用以实现交互:

// client-entry.js
import { createApp } from './app'

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

构建配置

服务端配置 需要设置 target: 'node'libraryTarget: 'commonjs2'

vue的ssr怎么实现

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

客户端配置 普通 SPA 配置即可,但需要与服务器 bundle 同步:

// webpack.client.config.js
module.exports = {
  // 标准配置
}

数据预取

异步数据获取 在组件中定义 asyncData 方法:

export default {
  asyncData({ store }) {
    return store.dispatch('fetchData')
  }
}

服务端数据预取 在渲染前获取所有匹配组件的异步数据:

// server-entry.js
const matchedComponents = router.getMatchedComponents()
Promise.all(
  matchedComponents.map(Component => {
    if (Component.asyncData) {
      return Component.asyncData({ store })
    }
  })
).then(() => {
  // 渲染处理
})

注意事项

  • 避免在服务端渲染期间产生全局副作用
  • 客户端和服务端的构建结果需要分别输出
  • 使用 vuex 进行状态管理时需处理服务端初始化
  • 静态资源路径需要使用绝对 URL

对于更复杂的项目,建议使用官方推荐的 Nuxt.js 框架,它内置了完善的 SSR 解决方案。

标签: vuessr
分享给朋友:

相关文章

vue实现年历

vue实现年历

Vue 实现年历的方法 使用 Vue 实现年历可以通过组件化开发方式,结合日期计算和动态渲染完成。以下是两种常见的实现方式: 基于原生 Vue 的日历组件 创建 Calendar.vue 组件文件,…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name:…

vue实现功能

vue实现功能

Vue 功能实现方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现常见功能的几种方法: 数据绑定与响应式更新 在 Vue 中,数据绑定通过 v-model…

vue el 实现

vue el 实现

Vue 中使用 Element UI (el) 的实现方法 Element UI 是一个基于 Vue 的组件库,提供丰富的 UI 组件,常用于快速构建企业级中后台产品。以下介绍 Vue 项目中集成和使…

vue实现getapp

vue实现getapp

Vue 中实现全局获取应用实例的方法 在 Vue 3 中,可以通过 getCurrentInstance 方法获取当前组件实例,但需要明确其使用场景和限制。以下是具体实现方式: 方法一:通过 get…

vue实现 页面

vue实现 页面

Vue 实现页面的核心方法 创建 Vue 项目 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 是官方脚手架工具,适合传统项目;Vite 提供更快的现代构建体验。 npm cre…