当前位置:首页 > 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 中实现视频开场动画可以通过结合 HTML5 的 <video> 标签和 Vue 的过渡效果或生命周期钩子来完成。以下是具体实现方法: 安装依…

vue表单实现搜索

vue表单实现搜索

实现Vue表单搜索功能 在Vue中实现表单搜索功能通常涉及表单绑定、事件处理和搜索逻辑。以下是具体实现方法: 数据绑定与表单结构 使用v-model实现表单与Vue数据的双向绑定: <tem…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组…

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click…

vue实现遮罩

vue实现遮罩

Vue 实现遮罩层的方法 在 Vue 中实现遮罩层可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-show 或 v-if 控制显示 通过 Vue 的指令动态控制遮罩层的显示与隐藏。…

django vue实现

django vue实现

Django与Vue.js整合实现方案 Django作为后端框架与Vue.js作为前端框架的整合,可以通过以下方式实现: 分离式开发 前后端完全分离,Django仅提供API接口,Vue.js通过a…