Vue 框架的 markdown 渲染组件,针对 AI 的 markdown 流式传输场景

Vue 框架的 markdown 渲染组件,针对 AI 的 markdown 流式传输场景

vue-renderer-markdown 专门构建用于处理从 AI 模型流式传输 Markdown 内容以及实时更新的独特需求,即使 Markdown 块不完整或快速变化,也能提供流畅的格式化效果。

🚀 Live Demo

Features

  • ⚡ 超高性能:针对实时流媒体进行了优化,最大限度减少重新渲染次数,并实现高效的 DOM 更新
  • 🌊 流式优先设计:专门构建用于处理不完整、快速更新且标记化的 Markdown 内容
  • ⌨️ 智能打字机效果:实时光标跟踪,具备自动定位和性能优化的动画效果
  • 🧩 自定义组件:在 Markdown 内容中无缝集成您的 Vue 组件
  • 📝 完整的 Markdown 支持:表格、数学公式、表情符号、复选框、代码块等等
  • 🔄 实时更新:处理部分内容和增量更新,不会破坏格式
  • 📦 优先使用 TypeScript:具备智能自动补全功能的完整类型定义
  • 🔌 零配置:开箱即用,可与任何 Vue 3 项目无缝集成的组件

安装

bash 复制代码
pnpm add vue-renderer-markdown
# or
npm install vue-renderer-markdown
# or
yarn add vue-renderer-markdown

安装依赖项(重要)

此软件包声明了一些您的项目也必须安装的依赖项,以便 vue-renderer-markdown 能够正常工作(例如: vuevue-i18nmermaidkatex 等)。如果缺少这些依赖项,您将看到警告,并且组件在运行时可能会失败。

在项目的根目录下运行以下命令之一,以安装此存储库的 package.json 中列出的常见对等节点:

pnpm (recommended):

bash 复制代码
pnpm add vue @iconify/vue @vueuse/core class-variance-authority clsx katex mermaid radix-vue tailwind-merge vue-use-monaco

npm:

bash 复制代码
npm install vue @iconify/vue @vueuse/core class-variance-authority clsx katex mermaid radix-vue tailwind-merge vue-use-monaco

yarn:

bash 复制代码
yarn add vue @iconify/vue @vueuse/core class-variance-authority clsx katex mermaid radix-vue tailwind-merge vue-use-monaco

Notes:

  • 安装的版本将默认为最新匹配的版本;确切的对等版本范围在本包的 package.json 中声明;如果您需要特定版本,请查阅它。
  • 某些组件(例如 vue-use-monaco / monaco-editor )是否安装取决于您计划使用哪些功能------仅安装您需要的组件。
  • 如果您在单体仓库内安装此库或使用 pnpm 工作区,请在工作区根目录安装依赖项,以便在使用该库的包中可用。

Why vue-renderer-markdown?

从 AI 模型、实时编辑器或实时更新中流式传输 Markdown 内容会带来独特的挑战:

  • 不完整的语法块可能会破坏传统的解析器
  • 内容的快速变化会导致过度重渲染和性能问题
  • 动态内容使光标定位变得复杂
  • 部分标记需要优雅处理,避免出现视觉故障

vue-renderer-markdown 通过采用流优化架构解决了这些难题,即使在最苛刻的实时场景下,也能保持完美的格式和性能。

用法

流式 Markdown(推荐)

非常适合用于 AI 模型响应、实时内容更新或任何需要实时 Markdown 渲染的场景:

vue 复制代码
<script setup lang="ts">
import { ref } from 'vue'
import MarkdownRender from 'vue-renderer-markdown'

const content = ref('')
const fullContent = `# Streaming Content\n\nThis text appears character by character...`

// Simulate streaming content
let index = 0
const interval = setInterval(() => {
  if (index < fullContent.length) {
    content.value += fullContent[index]
    index++
  }
  else {
    clearInterval(interval)
  }
}, 50)
</script>

<template>
  <MarkdownRender :content="content" :typewriter-effect="true" />
</template>

基本用法

对于静态或预生成的 Markdown 内容:

vue 复制代码
<script setup lang="ts">
import MarkdownRender from 'vue-renderer-markdown'

const markdownContent = `
# Hello Vue Markdown

This is **markdown** rendered as HTML!

- Supports lists
- [x] Checkboxes
- :smile: Emoji
`
</script>

<template>
  <MarkdownRender :content="markdownContent" />
</template>

性能特点

该流媒体优化引擎提供:

  • 增量解析代码块:仅处理更改的内容,而非整个代码块
  • 高效的 DOM 更新:最小化重新渲染
  • 实时光标跟踪:流畅的光标定位
  • 内存优化:智能清理功能可防止长时间流媒体会话期间出现内存泄漏
  • 基于动画帧:流畅的动画效果
  • 优雅降级:处理格式错误或不完整的 Markdown 时不会崩溃

https://github.com/Simon-He95/vue-markdown-render

相关推荐
酒尘&19 小时前
JS数组不止Array!索引集合类全面解析
开发语言·前端·javascript·学习·js
学历真的很重要20 小时前
VsCode+Roo Code+Gemini 2.5 Pro+Gemini Balance AI辅助编程环境搭建(理论上通过多个Api Key负载均衡达到无限免费Gemini 2.5 Pro)
前端·人工智能·vscode·后端·语言模型·负载均衡·ai编程
用户479492835691521 小时前
"讲讲原型链" —— 面试官最爱问的 JavaScript 基础
前端·javascript·面试
用户479492835691521 小时前
2025 年 TC39 都在忙什么?Import Bytes、Iterator Chunking 来了
前端·javascript·面试
JIngJaneIL21 小时前
基于Java非遗传承文化管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
+VX:Fegn089521 小时前
计算机毕业设计|基于springboot + vue心理健康管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
阿杰学AI21 小时前
AI核心知识39——大语言模型之World Model(简洁且通俗易懂版)
人工智能·ai·语言模型·aigc·世界模型·world model·sara
大怪v1 天前
【Virtual World 04】我们的目标,无限宇宙!!
前端·javascript·代码规范
哥布林学者1 天前
吴恩达深度学习课程四:计算机视觉 第一周:卷积基础知识(一)图像处理基础
深度学习·ai
狂炫冰美式1 天前
不谈技术,搞点文化 🧀 —— 从复活一句明代残诗破局产品迭代
前端·人工智能·后端