VitePress Theme Element Plus 是一个可复用的 Element Plus 风格 VitePress 主题(packages/theme)。主题延续了 Element Plus 的布局、排版和组件语言,并提供多种 Markdown 增强、演示容器和图标自动化能力,帮助多个站点复用一致的写作体验。
- Element Plus 视觉语言:复用 Element Plus 设计令文档与官方体系保持一致。
- 扩展布局:自定义
Layout.vue、局部导航与侧边栏控制,在默认 VitePress 主题之上增强。 - Markdown 增强:插件直接在 Markdown 中追加外链图标、可滚动表格、语义标签、API 提示和 Element Plus 风格任务列表。
- 一流的 Demo 工作流:
vitepress-better-demo-plugin驱动:::demo容器,支持实时预览、折叠代码、复制按钮以及 StackBlitz/CodeSandbox 快捷入口。 - 图标自动化:
vitepress-plugin-group-icons基于pnpm、vue或~logos:vitejs~等关键字自动注入 Iconify 图标,统一代码块视觉。 - 工作区工具链:依赖 Node 24.11.0 + pnpm 10(通过 Volta 管理),配合 ESLint(
@antfu/eslint-config)、lint-staged 与 Husky 保持格式与提交规范。
- 在目标文档项目中安装依赖:
pnpm add -D vitepress-theme-element-plus vitepress-better-demo-plugin \ vitepress-plugin-group-icons markdown-it-container pnpm add -D @types/markdown-it-container # 建议安装以获得类型提示 - 参考
packages/docs/.vitepress/config.mts配置 VitePress:import type { EPThemeConfig } from 'vitepress-theme-element-plus' import path from 'node:path' import mdContainer from 'markdown-it-container' import { defineConfig } from 'vitepress' import { createDemoContainer } from 'vitepress-better-demo-plugin' import { groupIconMdPlugin, groupIconVitePlugin } from 'vitepress-plugin-group-icons' import { mdExternalLinkIcon, mdTableWrapper, mdTag, mdTaskList, mdTooltip, } from 'vitepress-theme-element-plus/node' export default defineConfig<EPThemeConfig>({ vite: { plugins: [groupIconVitePlugin()], ssr: { noExternal: [ 'vitepress-theme-element-plus', 'vitepress-better-demo-plugin', ], }, optimizeDeps: { exclude: ['vitepress-theme-element-plus'] }, }, markdown: { config(md) { md.use(groupIconMdPlugin) md.use(mdExternalLinkIcon) md.use(mdTag) md.use(mdTooltip) md.use(mdTaskList) md.use(mdTableWrapper) md.use(mdContainer, 'demo', createDemoContainer(md, { demoDir: path.resolve(__dirname, '../demo'), autoImportWrapper: false, })) }, }, themeConfig: { logo: '/logo.svg', search: { provider: 'local' }, sidebar: [{ text: 'Guide', items: [{ text: 'Introduction', link: '/guide/introduction' }] }], }, })
- 在
.vitepress/theme/index.ts注册主题,确保 demo 组件与自动生成的图标 CSS 在客户端与构建阶段均可用:import { VitepressEpDemoBox, VitepressEpDemoPlaceholder, } from 'vitepress-better-demo-plugin/theme/element-plus' import Theme from 'vitepress-theme-element-plus' import 'virtual:group-icons.css' export default { ...Theme, enhanceApp({ app }) { app.component('VitepressDemoBox', VitepressEpDemoBox) app.component('VitepressDemoPlaceholder', VitepressEpDemoPlaceholder) }, } as typeof Theme
- 代码主题:
markdown.theme.light/dark分别配置为github-light与github-dark。 - 外链图标:
mdExternalLinkIcon为所有外部链接追加vp-link风格提示。 - 表格容器:
mdTableWrapper为宽表格添加滚动容器,改善移动端体验。 - 内联标签:
mdTag识别^(Beta)等标记并渲染彩色标签(如beta、deprecated、a11y)。 - API 提示:
mdTooltip将^[prop]("string | number")转换为<api-typing>组件,快速展示类型信息。 - 任务列表:
mdTaskList输出 Element Plus 风格的复选框,兼顾无障碍表现。 - Demo 容器:
packages/docs/demo下的::: demo块支持实时预览、复制按钮以及 StackBlitz/CodeSandbox 快捷入口。 - 图标分组:
groupIconMdPlugin+groupIconVitePlugin基于关键字或~collection:name~自动注入 Iconify 图标并通过virtual:group-icons.css暴露样式。
- Fork 并克隆仓库。
- 执行
pnpm install安装依赖。 - 日常开发运行
pnpm dev。 - 确认
pnpm build:theme、pnpm build:docs与 lint 全部通过。 - 使用
pnpm commit(czg)遵循 Conventional Commits 规范。
MIT © Hezhengxu,详见 LICENSE。