5分钟搞定VitePress自动侧边栏配置,告别手动维护
说实话,刚用 VitePress 搭博客那会儿,最让我头疼的就是侧边栏。
每写一篇新文章,就得手动去 config.mts 里加一条配置。文章少的时候还好,文章一多,真的搞不动。
你知道吗?其实 VitePress 可以自动生成侧边栏和文章列表!
今天就把这个让我省了大把时间的方案分享给你。
🎯 痛点:手动维护侧边栏有多烦
先说说我的情况。
我用 VitePress 搭建了一个个人博客,文章都放在 docs/已发布/ 目录下。一开始文章少,配置文件是这样的:
typescript
sidebar: [
{
text: "文章",
items: [
{ text: "文章1", link: "/已发布/文章1" },
{ text: "文章2", link: "/已发布/文章2" },
],
},
];看着挺简单对吧?
但当我写了10篇、20篇文章后,每次发布新文章都要改配置。而且文章是按发布时间排序的,新文章要插在最前面,得手动调整顺序。
说白了,这事儿重复又机械,完全不应该人工来做。
说句大实话:程序员的时间,不该浪费在这种体力活上。
🔍 探索:有没有自动化的方案
VitePress 官方提供了两个关键能力:
createContentLoader— 构建时数据加载,扫描目录提取 frontmatter- 第三方插件
vitepress-sidebar— 一行代码生成侧边栏配置
两个配合使用,就能实现侧边栏自动生成 + 文章列表页自动渲染。
关键发现:不是 VitePress 不支持自动化,而是需要把官方能力和插件组合起来用。
💡 实战:两步搞定
第一步:安装插件 + 配置侧边栏
bash
pnpm add -D vitepress-sidebar打开 .vitepress/config.mts,用 generateSidebar 自动生成:
typescript
import { defineConfig } from "vitepress";
import { generateSidebar } from "vitepress-sidebar";
export default defineConfig({
title: "TDL的个人笔记",
description: "年纪大了,记性不好,写点东西记录一下",
lang: "zh-CN",
themeConfig: {
nav: [
{ text: "首页", link: "/" },
{ text: "文章列表", link: "/已发布" },
],
// 自动生成侧边栏
sidebar: generateSidebar({
documentRootPath: "/docs",
useTitleFromFileHeading: true,
useFolderTitleFromIndexFile: true,
useFolderLinkFromIndexFile: true,
sortMenusByFrontmatterOrder: true,
sortFolderTo: "top",
collapsed: false,
}),
search: { provider: "local" },
},
});第二步:用 createContentLoader 做文章列表页
创建 docs/已发布/articles.data.ts:
typescript
import { createContentLoader } from "vitepress";
export default createContentLoader("已发布/*.md", {
includeSrc: true,
transform(rawData) {
return rawData
.filter((item) => item.frontmatter.date)
.map(({ url, frontmatter }) => ({
url,
title: frontmatter.title || url,
date: frontmatter.date,
description: frontmatter.description || "",
}))
.sort((a, b) => (b.date > a.date ? 1 : b.date < a.date ? -1 : 0));
},
});创建 docs/已发布/index.md,用 Vue 组件渲染列表:
markdown
---
title: 文章列表
---
<script setup>
import { data as articles } from './articles.data.ts'
</script>
<div class="article-list">
<a v-for="article in articles" :href="article.url" class="article-card">
<span class="article-date">{{ article.date }}</span>
<span class="article-title">{{ article.title }}</span>
</a>
</div>搞定!
真的绝了:侧边栏和文章列表全部自动生成。
📋 给文章加 frontmatter
每篇文章开头加这样的配置就行:
yaml
---
title: 文章标题
description: 文章的简短描述
date: 2025-03-26
order: 1
---| 字段 | 作用 |
|---|---|
title | 侧边栏显示的标题 |
description | 文章列表页显示的摘要 |
date | 列表页按日期倒序排列 |
order | 侧边栏按 order 排序(配合 sortMenusByFrontmatterOrder) |
✍️ 总结
现在的写作流程变成了:
- 写文章,加 frontmatter
- 保存到
已发布目录 - 完事儿
侧边栏自动更新,文章列表自动排序,全部零手动维护。
工具的价值,在于让人专注于创造,而不是维护。
如果你也在用 VitePress 写博客,强烈推荐试试这个方案。一次配置,长期省心,太香了!
你平时用什么工具写博客?有没有遇到过类似的"体力活"问题?欢迎在评论区聊聊。