Skip to content

常用插件安装

自动管理frontmatter

shell
npm install vitepress-plugin-setfrontmatter -D

安装提示版本兼容问题时,可用该命令npm install vitepress-plugin-setfrontmatter -D --force

.vitepress/config.mjs文件中添加以下内容:

js
import VitePluginVitePressAutoFrontmatter from 'vitepress-plugin-setfrontmatter'

export default defineConfig({
  vite: {
    plugins: [
      VitePluginVitePressAutoFrontmatter({
        pattern: '**/*.md',
        globOptions: { ignore: [""] }, //忽略的文件或目录
        permalinkPrefix: 'pages', // 永久链接前缀,如设置为"/pages/",生成的permalink为"/pages/xxxx",不设置不会生成
        categories: true // 是否启用自动添加frontmatter.categories功能
      })
    ]
  }
})

IMPORTANT

安装该插件是为实现Markdown文件自动创建permalink,再结合永久链接插件,实现自动配置永久链接。

详细配置项,可参考原链接:

永久链接

安装vitepress-plugin-permalink插件,该插件中Proxy方式可实现永久链接。

shell
npm install vitepress-plugin-permalink -D

安装提示版本兼容问题时,可用该命令npm install vitepress-plugin-permalink -D --force

.vitepress/config.mjs文件中添加以下内容:

js
import Permalink from "vitepress-plugin-permalink";

export default defineConfig({
    //添加以下内容
  vite: {
    plugins: [Permalink(Proxy)],
  },
    
});

假设项目的目录结构如下:

shell
.
├─ docs                # 项目根目录
  ├─ guide
  └─ api.md

在 Markdown文件的 frontmatter 中添加permalink内容:

markdown
---
#方式一:
permalink: /guide/xxxx
#方式二:
permalink: /xxxx
---

该文件除了通过 文件路径 访问,也可以通过 permalink 访问,xxxx可自定义输入。 Markdown文件的访问链接不再局限于文件名和其上级目录名。

IMPORTANT

安装该插件是为实现自动读取Markdown文件的permalink,结合自动管理frontmatter插件实现自动配置永久链接。

参考链接:

自动生成侧边栏

shell
npm install vitepress-sidebar -D

安装提示版本兼容问题时,可用该命令npm install vitepress-sidebar -D --force

先单独修改.vitepress/config.mjs文件中sidebar的内容,数值留空就行。

js
export default {
  themeConfig: {
     .....
    // 修改 
    sidebar: [
      {
        text: '',
        items: [
          { text: '', link: '' },
          { text: '', link: '' }
        ]
      }
    ],
    .....  
  }
};

修改.vitepress/config.mjs文件的整体结构。

js
import { withSidebar } from 'vitepress-sidebar';

//存放原来结构下的设置
const vitePressOptions = {
  title: "My Awesome Project",
  description: "A VitePress Site",
  themeConfig: {
     .....
  }
};

//存放Sidebar的自定义配置项
const vitePressSidebarOptions = {
  // 遍历目录
  documentRootPath: '/docs',
  //分组是否展开,null或undefined:全部展开,false:所有分组展开。true:所有分组折叠
  collapsed: false, 
  //菜单名称的第一个字母强制大写,true:大写
  capitalizeFirst: false,
  //控制台显示输出过程
  debugPrint: true,
  //显示h1内容作为标题,没有则为Unknown
  useTitleFromFileHeading: true,
  //根据文件中指定的Frontmatter中的键名如"name: 文章名称"显示菜单标题。
  //如果name在Frontmatter中不存在,将使用默认的title作为后备。
  //frontmatterTitleFieldName:'name' ,
  //Frontmatter中title的值显示标题。
  // 如果无法解析该值,则如果useTitleFromFileHeading选项为true,则从h1标签中获取该值,如果失败,则从文件名中获取该值。
  useTitleFromFrontmatter: false,
  //默认使用前缀分隔符(.),例如菜单将重命名为文件名:1.hello ->hello   1.1.hello -> 1.hello   1-1.hello -> hello
  removePrefixAfterOrdering: true,
  //配合removePrefixAfterOrdering,也可使用正则,
  // 如2024-01-01-hello,'/[0-9]{4}-[0-9]{2}-[0-9]{2}-/g'  执行后为hello
  prefixSeparator: '.',
  //排除目录或文件在菜单中显示,['abc/', 'def.md', 'ghi/file-**']
  excludeByGlobPattern: []
  //如果定义值为exclude,放在frontmatter中为exclude: true的文档,则不会显示。
  // excludeFilesByFrontmatterFieldName: 自定义名称
};

export default defineConfig(withSidebar(vitePressOptions, vitePressSidebarOptions));

更多Sidebar配置项,参考源链接:

图片缩放

shell
npm install medium-zoom

安装提示版本兼容问题时,可用该命令npm install medium-zoom --force

.vitepress\theme\index.js中,引入插件。

js
import { onMounted, watch, nextTick } from 'vue'
import { useRoute } from 'vitepress'
import mediumZoom from 'medium-zoom'

export default {
  extends: DefaultTheme,
   //添加内容
  setup() {
    const route = useRoute()
    const initZoom = () => {
      // 为所有图片增加缩放功能
      mediumZoom('.main img', { background: 'var(--vp-c-bg)' })
    }
    onMounted(() => {
      initZoom()
    })
    watch(
      () => route.path,
      () => nextTick(() => initZoom())
    )
  },
 
}

创建 .vitepress\theme\style\index.css 文件。

css
@import './var.css';

.vitepress/theme/index.js 文件中引入index.css

js
import './style/index.css'

.vitepress\theme\style\var.css中加入样式。

css

/************************ 图片缩放 ************************/
.medium-zoom-overlay {
  background-color: var(--vp-c-bg) !important;
  z-index: 100;
}

.medium-zoom-overlay ~ img {
  z-index: 101;
}

.medium-zoom--opened .medium-zoom-overlay {
  opacity: 0.9 !important;
}
/************************ 图片缩放 ************************/

参考链接:

Tab标签

cmd
npm i -D vitepress-plugin-tabs

安装提示版本兼容问题时,可用该命令npm i -D vitepress-plugin-tabs --force

docs\.vitepress\config.mjs文件中加入以下内容。

js
import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs'

export default defineConfig({
  markdown: {
    config(md) {
      md.use(tabsMarkdownPlugin)  
    },
  },
})

docs\.vitepress\theme\index.js文件中加入以下内容。

ts
import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client'

export default {
  extends: DefaultTheme,
  enhanceApp({ app }) {
    enhanceAppWithTabs(app)  
  },
}

实际用例:

markdown
:::tabs

=== tab 页签标题 2

内容区域 1

=== tab 页签标题 1

内容区域 2

:::

内容区域 1

参考链接:

时间线

提醒

修改了时间线的样式,视觉显示更明显。

cmd
npm install vitepress-markdown-timeline

安装提示版本兼容问题时,可用该命令npm install vitepress-markdown-timeline --force

docs\.vitepress\config.mjs文件中加入以下内容。

js
import timeline from "vitepress-markdown-timeline"
export default {
  // ...
  markdown: {  
    // ...
    config: (md) => {  
      md.use(timeline);  
    },  
  },   
};

docs\.vitepress\theme\index.js文件中引入插件。

js
import "vitepress-markdown-timeline/dist/theme/index.css"

docs\.vitepress\theme\style\blur.css中加入新样式。

css
/************************* 时间线*************************/
.timeline-dot {
    position: relative;
    padding: 0 0 18px 24px;
    color: var(--vp-custom-block-danger-text);
    box-sizing: border-box;
}
.timeline-dot::before {
    position: absolute;
    left: 0;
    top: 0;
    content: "";
    width: 16px;
    height: 16px;
    border-radius: 50%;
    border: solid 4px #FF7242;
    transform: translate(0, 18%);
}
.timeline-dot::after {
    position: absolute;
    left: 7px;
    top: 19px;
    content: "";
    width: 2px;
    height: calc(100% - 18px);
    background-color: #49B1F5;
}

/************************* 时间线*************************/

img

参考原链接:

代码折叠

cmd
npm install vitepress-plugin-codeblocks-fold

安装提示版本兼容问题时,可用该命令npm install vitepress-plugin-codeblocks-fold --force

docs\.vitepress\theme\index.js文件中引入以下内容。

js
import { useData, useRoute } from 'vitepress'
import codeblocksFold from 'vitepress-plugin-codeblocks-fold'
import 'vitepress-plugin-codeblocks-fold/style/index.css'

export default {
   DefaultTheme,

    setup() {    
        // 获取前言和路由
        const { frontmatter } = useData();  
        const route = useRoute();        
        // 基础使用
        codeblocksFold({ route, frontmatter });          
        // 可配置参数
        // codeblocksFold({ route, frontmatter }, true, 400);
    }     
};

其中配置项codeblocksFold() 接收三个参数:

参数名类型必填默认值描述
vitepressObjObject-包含 route 和 frontmatter 属性的对象
defaultAllFoldBooleantrue是否默认所有页面的代码块都设置成折叠状态
heightNumber400代码块被折叠后的高度(px)

可单独设置markdown文件,在frontmatter中添加cbf参数:

参数名类型可能值描述
cbfArrayboolean[1,2,3], true, false

当在frontmatter中设置cbf: [1,2,3]时,该数组含义为:

  • defaultAllFold 设置为 true(默认全部页面折叠)时,当前页面第 1、2、3 个代码块强制展开(不折叠)
  • defaultAllFold 设置为 false(默认全部页面展开)时,当前页面第 1、2、3 个代码块强制折叠

cbf 还有两个参数:truefalse

  • true 表示当前页面所有代码块折叠
  • false 表示当前页面所有代码块展开

参考链接: