Skip to content

VitePress Markmap Preview

npm

一个 VitePress 插件,用于在 Markdown 中预览 Markmap 思维导图。

✨ 特性

  • 🗺️ Markmap 集成: 在 Markdown 中直接渲染交互式思维导图
  • 🎨 可定制: 支持 markmap 的所有配置选项
  • 🔧 简单设置: 一键安装,快速配置
  • 📁 组件支持: 提供 Vue 组件用于思维导图渲染
  • 🚀 TypeScript: 完整的 TypeScript 支持和类型定义
  • ⚙️ 配置灵活: 支持通过 frontmatter 语法自定义配置

📦 安装

bash
npm install vitepress-markmap-preview
# 或
pnpm add vitepress-markmap-preview
# 或
yarn add vitepress-markmap-preview

🚀 快速开始

步骤 1:配置 VitePress

在 VitePress 配置中添加插件:

typescript
// .vitepress/config.ts
import { defineConfig } from 'vitepress';
import { vitepressMarkmapPreview } from 'vitepress-markmap-preview';

export default defineConfig({
  markdown: {
    config(md) {
      vitepressMarkmapPreview(md);
    },
  },
});

步骤 2:注册组件

在主题中注册 Vue 组件:

typescript
// .vitepress/theme/index.ts
import type { Theme } from 'vitepress';
import DefaultTheme from 'vitepress/theme';
import { initComponent } from 'vitepress-markmap-preview/component';
import 'vitepress-markmap-preview/dist/index.css';

export default {
  extends: DefaultTheme,
  enhanceApp({ app }) {
    initComponent(app);
  },
} satisfies Theme;

📖 使用方法

📝 基本用法

可以直接在 Markdown 中使用 markmap 代码块来创建思维导图:

⚙️ 自定义配置

支持通过 frontmatter 语法自定义 markmap 配置选项:

📂 读取外部文件

使用 PreviewMarkmapPath 组件可以读取指定的 Markdown 文件内容并展示为思维导图:

vue
<PreviewMarkmapPath path="./other.md" showToolbar />

不显示工具栏的话,则不写 showToolbar 属性即可。

📄 读取当前文件

不指定 path 属性时,将读取当前 Markdown 文件的内容:

vue
<PreviewMarkmapPath />

⚙️ 配置选项

🧩 PreviewMarkmapPath 组件属性

属性名类型默认值说明
pathstring-要读取的 Markdown 文件路径
showToolbarbooleanfalse是否显示工具栏

🎨 Markmap 配置选项

支持通过 frontmatter 中的 markmap 字段配置以下选项:

基础选项

选项类型默认值说明
showToolbarbooleantrue是否显示工具栏
colorstring[]d3.schemeCategory10节点颜色数组
initialExpandLevelnumber-1初始展开层级,-1 表示全部展开
maxWidthnumber0节点最大宽度,0 表示无限制
durationnumber500动画持续时间(毫秒)

布局选项

选项类型默认值说明
spacingHorizontalnumber80水平间距
spacingVerticalnumber5垂直间距
paddingXnumber2X轴内边距

交互选项

选项类型默认值说明
zoombooleantrue是否允许缩放
panbooleantrue是否允许平移
autoFitbooleanfalse是否自动适应容器
fitRationumber1适应比例

高级选项

选项类型默认值说明
colorFreezeLevelnumber0颜色冻结层级
toggleRecursivelybooleanfalse是否递归切换
scrollForPanbooleanfalse是否滚动平移
maxInitialScalenumber1最大初始缩放比例
lineWidthnumber1节点间连线的宽度

🔧 配置示例

基础配置示例

yaml
---
showToolbar: true
markmap:
  color: ['#2ecc71', '#3498db', '#9b59b6']
  initialExpandLevel: 2
  maxWidth: 400
  duration: 300
---

高级配置示例

yaml
---
showToolbar: false
markmap:
  color: ['#ff6b6b', '#4ecdc4', '#45b7d1', '#96ceb4', '#feca57']
  initialExpandLevel: -1
  maxWidth: 600
  duration: 500
  spacingHorizontal: 100
  spacingVertical: 10
  zoom: true
  pan: true
  colorFreezeLevel: 2
  lineWidth: 2
---

暗黑模式适配配置

yaml
---
showToolbar: true
markmap:
  color: ['#2ecc71', '#3498db', '#9b59b6', '#f39c12', '#e74c3c']
  initialExpandLevel: 1
  maxWidth: 500
  duration: 400
  spacingHorizontal: 80
  spacingVertical: 5
---

📚 更多示例

查看 配置示例文档 获取更多详细的使用示例和配置说明。

📄 License

MIT License

🙏 致谢


Made with ❤️ by flingyp