Automatically generate VitePress sidebar
English | ๐จ๐ณ ไธญๆ็ไป็ป
- ๐ช Automatic sidebar generation
- โจ Title of files synchronized with sidebar
- ๐ Automatic reload when files are deleted or title is modified
- โ๏ธ Customizable configuration options (custom directory names, custom file sorting).
# pnpm
pnpm i @iminu/vitepress-plugin-auto-sidebar
# yarn
yarn add @iminu/vitepress-plugin-auto-sidebar
# npm
npm install @iminu/vitepress-plugin-auto-sidebar
// .vitepress/config.ts
import AutoSidebar from "@iminu/vitepress-plugin-auto-sidebar";
export default defineConfig({
vite: {
plugins: [
AutoSidebar({
/**
* after resolve, we can change it
*/
sidebarResolved(value) {
// do sort
value["/dir2/"][0].items?.sort((a, b) => a.text - b.text);
// rename
value["/dir2/"][0].text = "sorted";
},
ignores: ["index.md"],
// Which files are included
docs: path.resolve(process.cwd(), "docs/demo"),
/**
* .vitepress parent folder
*/
root: path.resolve(process.cwd(), "docs"),,
}),
],
},
});
โโโ .vitepress
โโโ dir1
โ โโโ dir1-1
โ โ โโโ 1.md
โ โ โโโ 2.md
โ โ โโโ dir1-1-1
โ โ โโโ 1.md
โ โโโ dir1-2
โ โโโ 1.md
โโโ dir2
โ โโโ 2-2
โ โโโ 2.md
โ โโโ 3.md
โโโ index.md
โโโ node_modules
โโโ package.json
TO
{
"/dir2/": [
{
"text": "2-2",
"collapsed": false,
"items": [
{
"text": "2-2",
"link": "/dir2/2-2/3.md"
},
{
"text": "222",
"link": "/dir2/2-2/2.md"
}
]
}
],
"/dir1/": [
{
"text": "dir1-2",
"collapsed": false,
"items": [
{
"text": "1-2",
"link": "/dir1/dir1-2/1.md"
}
]
},
{
"text": "dir1-1",
"collapsed": false,
"items": [
{
"text": "2222",
"link": "/dir1/dir1-1/2.md"
},
{
"text": "1-1",
"link": "/dir1/dir1-1/1.md"
},
{
"text": "dir1-1-1",
"collapsed": false,
"items": [
{
"text": "1-1-1",
"link": "/dir1/dir1-1/dir1-1-1/1.md"
}
]
}
]
}
]
}