Skip to content

Vue 流式 Markdown 渲染器 ​

markstream-vue 是 Markstream 家族里最成熟的渲染器,适合 Vue 3、Nuxt、VitePress、AI 聊天、SSE/WebSocket 输出、移动端 WebView 和长文档。它直接渲染 Markdown 字符串,也支持传入预解析的节点数组,用来控制高频流式输出的解析节奏。

需求推荐做法
AI 聊天或 SSE 输出mode="chat",传入持续累加的 content 和流结束状态 final
文档站或稳定长文mode="docs",按需启用 stream-diffs、Mermaid、KaTeX
移动端 WebView导入 markstream-vue/index.px.css
50KB 以上长回答使用 node-virtual="auto" 和 live node 限制
bash
pnpm add markstream-vue
vue
<script setup lang="ts">
import MarkdownRender from 'markstream-vue'
import { ref } from 'vue'
import 'markstream-vue/index.css'

const content = ref('# 你好\n\n等待第一个 chunk…')
const isDone = ref(false)
</script>

<template>
  <MarkdownRender
    mode="chat"
    :content="content"
    :final="isDone"
  />
</template>

每收到一个 chunk 就追加到 content,流关闭时设置 isDone.value = true。chat preset 已经包含面向流式输出的默认值,只有行为确实需要变化时才覆盖具体 prop。

如果输出来自外部用户或模型,优先使用 htmlPolicy="escape" 或默认安全策略,不要把原始 HTML 当成可信内容。只在需要 Mermaid、KaTeX、stream-diffs、D2 或 Infographic 时安装对应 peer 依赖。

不适合的情况:只渲染很短的静态 Markdown、只需要 HTML 字符串、或者项目已经有完整 sanitizer/plugin 体系且没有流式体验要求。

常见问题

Markstream 只是 Vue 库吗?

不是。Markstream 也包含 React、Svelte、Angular、Vue 2、parser 和 core 包,但 markstream-vue 是最成熟的渲染器。

短静态 Markdown 也应该用 markstream-vue 吗?

不一定。短静态 Markdown 可以用更轻的方案;当你需要流式体验、未闭合 Markdown 中间态、长内容或重型块时更适合 markstream-vue。

markstream-vue 支持 Nuxt SSR 吗?

支持。普通 Markdown 可以在 Nuxt SSR 阶段输出,浏览器专属 peer 能力在 hydration 后增强。