Appearance
Nuxt 3 SSR 用法示例
For the English version, see nuxt-ssr.md.
本示例演示如何在 Nuxt 3 中安全地集成 vue-renderer-markdown,确保仅在浏览器端初始化 Monaco、Mermaid、Web Worker 等客户端功能。
安装浏览器端依赖
根据需要安装可选依赖。例如要启用 Mermaid 和 Monaco 代码编辑器:
bash
# pnpm(推荐)
pnpm add mermaid stream-monaco
# npm
npm install mermaid stream-monaco请勿在 SSR 的服务端上下文中直接导入这些依赖。
示例页面(仅客户端渲染)
创建一个页面或组件,通过 Nuxt 内置的 <client-only> 包裹,从而确保渲染器只在客户端挂载:
vue
<script setup lang="ts">
import { ref } from 'vue'
import MarkdownRender from 'vue-renderer-markdown'
const markdown = ref(`# 来自 Nuxt 3 的问候\n\n这段内容仅在客户端渲染。`)
</script>
<template>
<client-only>
<MarkdownRender :content="markdown" />
</client-only>
</template>这样可以保证 MarkdownRender 组件及其懒加载的可选依赖只会在浏览器端被导入与初始化。
服务端渲染图表或公式
如果希望图表或数学公式在服务端即生成 HTML(提高首屏或 SEO),可以在构建阶段或服务端任务中预渲染:
- 使用
mermaid-cli/katex等工具在构建时将特定内容转换为 HTML/SVG 并嵌入页面。 - 提供一个服务端接口返回预渲染的图表 HTML/SVG,客户端按需拉取。
随后将这些预渲染内容作为可信 HTML 或服务端生成的 AST 传入渲染器,即可避免在客户端重复初始化重型依赖。
注意事项
- 使用 Monaco 编辑器、Web Worker 或渐进式 Mermaid 时,推荐始终配合
<client-only>。 - 库经过 SSR 导入安全性设计:重型依赖采用浏览器端懒加载,并对 DOM/Worker 调用做了守卫。如果仍遇到导入阶段的
ReferenceError,请附上堆栈信息提交 issue。
如需完整的 Nuxt 3 集成示例(带可运行的 playground/ 项目),欢迎提出需求或提 issue。