Skip to content

@vitepress-plugin/markmap

npm versionlicensedownloads

一个强大的 VitePress 插件,用于在 Markdown 中优雅地渲染交互式脑图。基于 markmap-libmarkmap-view 构建。

✨ 特性

  • 📝 简单易用:使用标准的 Markdown 容器语法,无需额外学习
  • 🚀 开箱即用:自动注入所有必需的依赖和组件,无需额外配置
  • 高效能:基于 markmap-lib 和 markmap-view,渲染性能优异
  • 🎯 灵活配置:提供全局和局部的配置选项,满足多种需求

📦 安装

bash
# 使用 npm
npm install @vitepress-plugin/markmap

# 使用 pnpm
pnpm add @vitepress-plugin/markmap

# 使用 yarn
yarn add @vitepress-plugin/markmap

🚀 快速开始

1. 配置插件

.vitepress/config.mts 中:

typescript
import { defineConfig } from 'vitepress'
import markmapPlugin from '@vitepress-plugin/markmap'

export default defineConfig({
  vite: {
    plugins: [
      markmapPlugin(),
    ],
  },
})

2. 在 Markdown 中使用

markdown
:::markmap
---
containerHeight: 500
markmap:
  color: red
  maxInitialScale: 2
  spacingVertical: 16
  spacingHorizontal: 50
---
# Root Node
* Branch 1
  -  Leaf 1.1
  -  Leaf 1.2
* Branch 2
  - Leaf 2.1
  - Leaf 2.2
:::

🎯 配置选项

插件级配置

选项类型默认值说明
namestring'markmap'自定义容器名称
containerHeightstring | number300全局自定义容器高度
themelight | dark默认和vitepress主题一致全局主题

容器级属性

在单个容器中可以覆盖全局配置:
支持使用 YAML frontmatter,并使用 gray-matter 解析。frontmatter 必须位于 容器的顶部,并且需要在三条虚线之间采用有效的 YAML 格式。例如:

md
:::markmap
---
containerHeight: 500
markmap:
  color: red
---

...
:::
选项类型默认值说明
containerHeightstring | number300自定义容器高度
themelight | dark默认和vitepress主题一致主题
markmapobject/自定义脑图配置
markmap:colorstring/颜色
markmap:spacingHorizontalnumber24水平方向间隔距离
markmap:spacingVerticalnumber10垂直方向间隔距离
markmap:maxInitialScalenumber1最大的初始放大倍数
markmap:durationnumber500展开动画时长(sm)
markmap:embedGlobalCSSbooleantrue是否嵌入全局CSS
markmap:autoFitbooleanfalse
markmap:fitRationumber0.95适合缩放比例
markmap:initialExpandLevelnumber-1初始展开层级(-1: 全部展开)
markmap:zoombooleantrue是否可以缩放(false 时不影响toolbar的缩放操作)
markmap:panbooleantrue是否可以滚动
markmap:scrollForPanbooleanMacintosh: true
其他: false
markmap:toggleRecursivelybooleanfalse

🏗️ 项目架构

/
├── src/
│   ├── index.ts          # 插件主入口
│   ├── markmap.vue       # Vue 3 脑图组件
│   ├── types.ts          # TypeScript 类型定义
│   └── utils.ts          # 工具函数(Markdown 解析等)
├── vite.config.ts        # Vite 构建配置
├── tsconfig.json         # TypeScript 配置
├── package.json          # 项目配置
└── README.md             # 项目文档

🔧 核心文件说明

src/index.ts - 插件主文件

  • 实现了 Vite 插件接口
  • 自动转换 Markdown 中的脑图容器
  • 处理热模块替换(HMR)
  • 导出类型定义和工具函数

关键功能

  • transform 钩子:转换 Markdown 容器为组件调用
  • resolveId 钩子:处理虚拟模块导入
  • load 钩子:返回虚拟模块内容

src/markmap.vue - Vue 3 组件

  • 提供交互式脑图渲染
  • 集成 markmap-lib(Markdown → 脑图结构)
  • 集成 markmap-view(脑图可视化和交互)

关键特性

  • 响应式数据绑定
  • 实时更新和重新渲染

src/types.ts - 类型定义

提供完整的 TypeScript 类型支持

🎨 样式定制

在 VitePress 主题中添加自定义 CSS:

css
/* .vitepress/theme/custom.css */

.markmap-container {
  ...
}

🐛 常见问题

Q: 脑图不显示?

A: 检查以下几点:

  • Markdown 语法是否正确

Q: 如何改变默认高度?

A: 在在容器中指定 containerHeight 属性

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 许可证

MIT License - 详见 LICENSE

🔗 相关链接

👨‍💻 作者

PaddyWang - GitHub


给个 Star ⭐ 如果这个项目对你有帮助!

MIT License