🔥你还不知道VitePress吗?

249 阅读4分钟

VitePress 基本功能及 Vitepress-theme-demoblock 插件使用指南

一、VitePress 基本功能介绍与使用示例

1.1 VitePress 简介

VitePress 是一个由 Vite 驱动的静态站点生成器(SSG),专为快速构建技术文档、博客等轻量级网站设计。它基于 Vue.js,具有简洁的配置、快速的热更新和良好的性能,能够帮助开发者轻松搭建美观且功能强大的文档站点。

1.2 基本功能

1.2.1 快速搭建项目

使用 npm 或 yarn 可以快速初始化一个 VitePress 项目。通过命令行运行

npm init vitepress@latestyarn create vitepress

按照提示完成项目创建,之后在项目目录下运行

npm run docs:devyarn docs:dev

即可启动本地开发服务器,在浏览器中预览站点。

1.2.2 Markdown 支持

VitePress 深度支持 Markdown 语法,允许用户使用简洁的 Markdown 编写内容。

同时,它还支持 Markdown 扩展语法,如 YAML Front Matter 用于设置页面元数据(标题、描述等),以及 Vue 组件的直接嵌入,让静态内容也能拥有动态交互效果。

例如,在 Markdown 文件中添加 YAML Front Matter:

---
title: 我的VitePress页面
description: 这是一个使用VitePress创建的页面
layout: layouts/MyLayout.vue
---
1.2.3 主题与定制

VitePress 提供了默认主题,具备简洁的 UI 风格。

用户也可以自定义主题,通过修改 CSS 样式、添加自定义 Vue 组件,甚至创建全新的主题布局,来满足个性化需求。

比如,在.vitepress/theme/index.js 文件中引入自定义样式:

import DefaultTheme from 'vitepress/theme'
import './styles/main.css'
export default {
 ...DefaultTheme,
  enhanceApp({ app }) {
    // 可以在这里注册全局组件等
  }
}
1.2.4 搜索功能

VitePress 内置了搜索功能,用户无需额外配置即可使用。在站点页面中,搜索框会自动根据文档内容进行关键词匹配,方便读者快速找到所需信息。

1.3 使用示例

假设我们要创建一个简单的技术文档页面。首先,在docs目录下创建一个新的 Markdown 文件,如example.md,内容如下:

---
title: 示例页面
description: 这是一个VitePress示例页面
---
# 欢迎来到示例页面
这里是一些示例内容,可以使用Markdown语法编写文本、标题、列表等。
- 列表项1
- 列表项2

保存文件后,启动本地开发服务器,在浏览器中访问对应的链接,即可看到创建的示例页面。

二、Vitepress-theme-demoblock 插件使用场景和功能配置及示例

2.1 插件使用场景

Vitepress-theme-demoblock 插件主要用于在技术文档中展示代码示例及其实际效果,特别适用于组件库文档、前端框架教程等场景。它可以让读者更直观地看到代码运行后的样子,增强文档的可读性和实用性。

例如,当你在编写一个 Vue 组件库的文档时,通过该插件可以直接展示组件的多种使用方式及效果,方便开发者参考和使用。

2.2 功能配置

2.2.1 安装插件

首先,在项目中安装vitepress-theme-demoblock插件。

使用 npm 安装的命令为:npm install vitepress-theme-demoblock

使用 yarn 安装则运行:yarn add vitepress-theme-demoblock

2.2.2 配置插件

配置基于 vitepress-theme-demoblock@^3.0.0"

.vitepress/theme/index.js 中使用 vitepress-theme-demoblock 主题,并注册组件(包含主题中默认的组件):

import DefaultTheme from 'vitepress/theme'
import "vitepress-theme-demoblock/dist/theme/styles/index.css";
import Demo from "vitepress-theme-demoblock/dist/client/components/Demo.vue";
import DemoBlock from "vitepress-theme-demoblock/dist/client/components/DemoBlock.vue";
import setup from "@/components"; // 组件组册方法

export default {
  extends: DefaultTheme,
  enhanceApp(ctx) {
    app.component("Demo", Demo);
    app.component("DemoBlock", DemoBlock);
    setup(ctx.app); // 只有全局组册组件,在demo示例中组件才能显示
  }
}

setup注册方法示例:

import { plugins, components } from "./index";
import type { App, Component } from "vue";

export function setupComponents(app: App) {
  plugins.forEach((plugin: { install: (app: App) => void }) => {
    app.use(plugin);
  });
  components.forEach((item: Component) => {
    app.component(item.name!, item);
  });
}

同时,.vitepress/config.js 文件中使用 demoblockPlugin 和 demoblockVitePlugin 插件:

import { demoblockPlugin, demoblockVitePlugin } from 'vitepress-theme-demoblock'
export default defineConfig({
  // 其他配置...
  markdown: {
    config: (md) => {
      md.use(demoblockPlugin)
    }
  },
  vite: {
    plugins: [demoblockVitePlugin()]
  }
})
2.2.3 自定义主题

通过配置 customClass 类名称,自定义 demoblock 样式

markdown: {
  config: (md) => {
    md.use(demoblockPlugin, {
      customClass: 'demoblock-custom'
    })
  }
}

2.3 使用示例

假设我们有一个简单的 组件示例:basic.md,内容如下:

<template>
  <RePageCard>
    <ReList :items="items" :metas="metas"></ReList>
  </RePageCard>

  <RePageCard>
    <ReList :items="items" :metas="metas1"></ReList>
  </RePageCard>

  <RePageCard>
    <ReList :items="items" :metas="metas2"></ReList>
  </RePageCard>
</template>

<script setup lang="ts">
import { UserFilled } from "@element-plus/icons-vue";
import { ref } from "vue";
const metas = ref({
  avatar: {},
  title: {},
  subTitle: {},
  description: {},
  content: {}
});
const metas1 = ref({
  title: {
    dataIndex: "title2"
  },
  description: {},
  content: {}
});
const metas2 = ref({
  avatar: {},
  title: {},
  content: {}
});

const items = ref([
  {
    id: 1,
    title: "Title1",
    title2: "Title2",
    subTitle: "Sub-title",
    description: "Description",
    content: "Content",
    avatar: UserFilled
  },
  {
    id: 2,
    title: "Title1",
    title2: "Title2",
    subTitle: "Sub-title1",
    description: "Description1",
    content: "Content1",
    avatar: UserFilled
  }
]);
</script>

在 Markdown 文件中引用该示例文件,使用:::demo语法:

## 基础

通过 `metas` 字段配置列表项展示内容。支持配置列表项内容对于的数据字段,自定义渲染,绑定事件,自定义样式类。

:::demo

<!--@include: ../demo/list/basic.md-->

:::

上述组件示例会在文档中展示:

image.png

此版本的demo组件基于对markdown的代码片段的解析(基于markdonw-it),然后直接进行示例内容的渲染实现示例的展示,所以需要对示例中使用的组件进行全局注册,否则会导致渲染异常。

解析组件有误,可能是 @ 别名设置问题,需要在 .vitepress/config.js 文件中修改 vite.resolve.alias 配置。