You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在服务端渲染(SSR)页面中使用Vue组件且不覆盖原有内容

解决方案

原有配置原理说明

你新增的Vite别名配置是将Vue依赖指向了带模板编译器的完整构建版本,这个版本可以直接读取页面中已有的SSR渲染的HTML内容作为模板,识别你注册的组件标签原地渲染,因此不会覆盖原有内容。该版本相比生产环境常用的runtime-only版本仅增加约10KB gzipped的体积,如果改造范围不大,这个体积损耗完全可以接受。
注意你当前的入口代码存在顺序错误,需要先注册全局组件再执行挂载,否则组件无法被正确识别,修正后写法如下:

import { createApp } from 'vue'
import TestingComponent from './components/TestingComponent.vue';

const app = createApp({})
// 先注册组件
app.component('testing-component', TestingComponent)
// 后执行挂载
app.mount("#app")

无额外体积的最优方案:使用Vue自定义元素

如果不想引入模板编译器增加体积,可以直接将Vue组件编译为原生自定义元素,不需要全局挂载#app容器,完全不会改动页面原有SSR内容,是渐进式改造的首选方案:

  1. 移除vite.config.js中关于vue的别名配置,恢复为默认的runtime-only版本
  2. 修改组件注册逻辑:
import { defineCustomElement } from 'vue'
import TestingComponent from './components/TestingComponent.vue';

// 将Vue组件转换为原生自定义元素
const TestingElement = defineCustomElement(TestingComponent)
// 注册到浏览器自定义元素注册表
customElements.define('testing-component', TestingElement)
  1. 页面中使用方式不变,仍然直接写<testing-component></testing-component>即可,浏览器会自动识别该标签并渲染对应的Vue组件,不会影响其他原有内容。

内容的提问来源于stack exchange,提问作者Bob Voorneveld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:09:03