在 Vue 或前端项目中处理 Markdown 格式,以下是一些推荐的开源依赖和工具,根据需求分类整理:
1. 基础 Markdown 解析与渲染
Vue 专用库
-
@vueuse/markdown
-
VueUse 生态的 Markdown 工具,轻量且集成度高。
-
适合快速在 Vue 项目中渲染 Markdown。
-
-
vue-markdown
-
基于
marked
的 Vue 组件,支持自定义插槽和插件。 -
简单易用,但更新可能不够频繁。
-
-
vite-plugin-vue-markdown
-
在 Vite 中直接渲染 Markdown 为 Vue 组件,支持 Frontmatter 和代码高亮。
-
适合静态站点生成(如 VitePress、Vitepress)。
-
通用 JavaScript 库(需配合 Vue 使用)
-
marked
-
高性能的 Markdown 解析器,支持自定义渲染规则。
-
需手动处理 HTML 转义和代码高亮。
-
-
markdown-it
-
高度可扩展的 Markdown 解析器,插件生态丰富(如目录生成、表情符号等)。
-
示例集成:
import markdownIt from 'markdown-it'; const md = markdownIt().use(somePlugin);
-
-
remark
+rehype
-
基于 AST 的现代化工具链,适合复杂处理(如自定义语法、SEO 优化)。
-
需要搭配
remark-html
或rehype-react
使用。
-
2. 代码高亮支持
-
highlight.js
-
通用代码高亮库,支持多种语言主题。
-
配合
markdown-it
使用:const md = markdownIt({ highlight: (code, lang) => hljs.highlight(code, { language: lang }).value });
-
-
prismjs
-
更现代的代码高亮方案,支持行号和插件扩展。
-
可通过
markdown-it-prism
插件集成到markdown-it
。
-
3. 扩展功能
数学公式
-
markdown-it-katex
-
支持 LaTeX 数学公式渲染,依赖 KaTeX CSS。
-
-
markdown-it-mathjax3
-
使用 MathJax 3 渲染公式,适合复杂数学场景。
-
自定义组件
-
markdown-it-vue
-
支持在 Markdown 中直接编写 Vue 组件,实现交互功能。
-
目录生成
-
markdown-it-toc-done-right
-
自动生成带锚点的目录结构。
-
4. 完整解决方案
-
VitePress
-
基于 Vite 和 Vue 3 的静态站点生成器,内置 Markdown 增强(代码高亮、Frontmatter、自定义布局等)。
-
适合文档类项目。
-
-
Nuxt Content Module
-
在 Nuxt.js 中直接解析 Markdown 文件,支持 Frontmatter 和组件注入。
-
适合内容驱动型网站。
-
推荐方案
-
简单项目:
markdown-it
+highlight.js
+ Vue 的v-html
指令。 -
复杂需求:
markdown-it
配合插件(如目录、公式、自定义组件)。 -
文档站点:直接使用 VitePress 或 Nuxt Content,开箱即用。
示例代码(Vue 3 + markdown-it)
<template> <div class="markdown-body" v-html="compiledMarkdown"></div> </template> <script setup> import { ref } from 'vue'; import markdownIt from 'markdown-it'; import hljs from 'highlight.js'; const md = markdownIt({ html: true, // 允许 HTML 标签 linkify: true, // 自动转换链接 highlight: (code, lang) => hljs.highlight(code, { language: lang }).value }); const compiledMarkdown = ref(md.render('# Hello Markdown!')); </script> <style> @import 'highlight.js/styles/github.css'; .markdown-body { max-width: 800px; margin: 0 auto; } </style>
根据项目需求选择合适的工具组合,平衡灵活性与开发效率!