当前位置:首页 > 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 字符串:

// 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'

// 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')
  }
}

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

vue的ssr怎么实现

// 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实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…

vue实现导航

vue实现导航

使用 Vue Router 实现导航 Vue Router 是 Vue.js 官方提供的路由管理器,用于构建单页应用(SPA)的导航系统。以下是实现导航的基本步骤。 安装 Vue Router n…

vue实现座位

vue实现座位

Vue实现座位布局 使用Vue实现座位布局可以通过组件化和响应式数据管理来简化开发流程。以下是一个完整的实现方案: 数据准备 定义座位数据结构,通常使用二维数组表示行列关系: data() {…

vue实现例子

vue实现例子

以下是一些常见的 Vue 实现例子,涵盖基础功能到进阶应用场景: 基础数据绑定 使用 v-model 实现双向数据绑定: <template> <div> &l…

vue实现tooltips

vue实现tooltips

Vue 实现 Tooltips 的方法 使用原生 HTML title 属性 在 Vue 模板中直接使用 HTML 原生 title 属性实现简单的提示效果。这种方式无需额外依赖,但功能较为基础,无法…

vue轮播组件实现

vue轮播组件实现

Vue 轮播组件实现方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template>…