前言
在上一篇系列文章中,我们介绍了 Hugo 这个速度之王。本文将深入讲解 VitePress —— 一个由 Vue.js 团队官方维护的静态网站生成器,特别适合构建技术文档和博客。
VitePress 是 VuePress 的现代化继任者,基于 Vite 构建,提供了更快的开发体验和更简洁的 API。
VitePress 简介
什么是 VitePress?
VitePress 是一个基于 Vue 3 和 Vite 的静态网站生成器,专为编写技术文档而设计。它将 Markdown 文件转换为 Vue 单文件组件(SFC),在构建时生成静态 HTML。
VitePress vs VuePress vs Hexo
| 特性 | VitePress | VuePress | Hexo |
|---|---|---|---|
| 底层构建工具 | Vite | Webpack | 无(自身实现) |
| Vue 版本 | Vue 3 | Vue 2 | 无 |
| 开发体验 | 极快(HMR) | 较慢 | 一般 |
| 配置复杂度 | 简单 | 中等 | 简单 |
| 适用场景 | 文档/轻量博客 | 文档 | 博客 |
| 主题生态 | 较新(快速成长) | 成熟 | 非常成熟 |
VitePress 的核心优势
- 基于 Vite:享受 Vite 的极速热更新和构建
- Vue 3 驱动:可以使用 Vue 3 的所有特性
- 配置简单:约定优于配置,上手快
- 默认主题美观:开箱即用的文档主题
- Markdown 扩展:支持 Vue 组件、自定义容器等
安装 VitePress
环境要求
- Node.js 18 或以上版本
- 包管理器:npm、yarn 或 pnpm
全新项目安装
# 创建项目目录
mkdir my-docs && cd my-docs
# 初始化 package.json
npm init -y
# 安装 VitePress
npm install -D vitepress手动设置
在 package.json 中添加脚本:
{
"scripts": {
"docs:dev": "vitepress dev",
"docs:build": "vitepress build",
"docs:preview": "vitepress preview"
}
}创建第一个文档页面:
mkdir docs
echo '# Hello VitePress' > docs/index.md启动开发服务器:
npm run docs:dev访问 http://localhost:5173 查看效果。
使用脚手架快速创建(推荐)
npm init vitepress@latest按照提示选择:
- 项目目录(默认
./) - 站点名称
- 站点描述
- 主题(默认主题 / 自定义主题)
- 是否使用 TypeScript
- 是否安装 Tailwind CSS
项目结构
一个标准的 VitePress 项目结构如下:
my-docs/
├── docs/ # 文档根目录
│ ├── .vitepress/ # VitePress 配置目录
│ │ ├── config.js # 配置文件(重要!)
│ │ ├── theme/ # 自定义主题目录
│ │ │ └── index.js # 主题入口
│ │ └── cache/ # 构建缓存(自动生成)
│ ├── public/ # 静态资源(直接复制)
│ │ └── favicon.ico
│ ├── guide/ # 指南目录
│ │ ├── getting-started.md
│ │ └── advanced.md
│ ├── api/ # API 目录
│ │ └── reference.md
│ ├── index.md # 首页
│ └── sidebar.md # 侧边栏示例
├── package.json
└── README.md配置文件详解
VitePress 的配置文件位于 .vitepress/config.js(也支持 .ts、.mts)。
基础配置
// .vitepress/config.js
export default {
// 站点标题
title: '我的文档站点',
// 站点描述(用于 SEO)
description: '基于 VitePress 构建的技术文档',
// 基础路径(部署到子目录时需要)
base: '/',
// 语言
lang: 'zh-CN',
// 最后更新时间
lastUpdated: true,
// 清理 URL(去掉 .html 后缀)
cleanUrls: true,
// 主题配置
themeConfig: {
// 导航栏
nav: [
{ text: '首页', link: '/' },
{ text: '指南', link: '/guide/getting-started' },
{ text: 'API', link: '/api/reference' },
{ text: 'GitHub', link: 'https://github.com' }
],
// 侧边栏
sidebar: {
'/guide/': [
{
text: '指南',
items: [
{ text: '快速开始', link: '/guide/getting-started' },
{ text: '高级用法', link: '/guide/advanced' }
]
}
],
'/api/': [
{
text: 'API 参考',
items: [
{ text: '配置项', link: '/api/reference' }
]
}
]
},
// 社交链接
socialLinks: [
{ icon: 'github', link: 'https://github.com/yourusername' }
],
// 页脚
footer: {
message: 'Released under the MIT License.',
copyright: 'Copyright © 2021-present Your Name'
},
// 编辑链接
editLink: {
pattern: 'https://github.com/yourusername/repo/edit/main/docs/:path',
text: '在 GitHub 上编辑此页'
},
// 上次更新时间
lastUpdated: {
text: '最后更新于',
formatOptions: {
dateStyle: 'short',
timeStyle: 'short'
}
}
}
}多语言配置
export default {
locales: {
root: {
label: '中文',
lang: 'zh-CN',
title: '我的文档',
description: '中文文档'
},
en: {
label: 'English',
lang: 'en-US',
title: 'My Docs',
description: 'English Documentation',
link: '/en/'
}
},
themeConfig: {
// 语言切换器
locales: {
root: {
nav: [{ text: '指南', link: '/guide/' }]
},
en: {
nav: [{ text: 'Guide', link: '/en/guide/' }]
}
}
}
}Markdown 扩展
VitePress 在标准 Markdown 基础上进行了大量扩展。
自定义容器
::: tip 提示
这是一个提示信息。
:::
::: warning 警告
这是一个警告信息。
:::
::: danger 危险
这是一个危险操作!
:::
::: details 点击展开
这里是折叠的内容...
可以包含任何 Markdown 内容。
:::代码块扩展
```javascript {1,3-5}
// 高亮第 1 行和第 3-5 行
function hello() {
console.log('Hello');
return true;
}# 可执行代码块(需要配置)
echo "Hello VitePress"
### 在 Markdown 中使用 Vue 组件
```markdown
<script setup>
import CustomComponent from './.vitepress/theme/components/CustomComponent.vue'
</script>
# 使用自定义组件
<CustomComponent title="Hello" />表情符号
:smile: :heart: :thumbsup:自定义主题
扩展默认主题
创建 .vitepress/theme/index.js:
// .vitepress/theme/index.js
import DefaultTheme from 'vitepress/theme'
import MyLayout from './MyLayout.vue'
export default {
...DefaultTheme,
// 覆盖布局组件
Layout: MyLayout
}创建自定义布局组件 .vitepress/theme/MyLayout.vue:
<!-- .vitepress/theme/MyLayout.vue -->
<script setup>
import DefaultTheme from 'vitepress/theme'
import MyCustomComponent from './MyCustomComponent.vue'
const { Layout } = DefaultTheme
</script>
<template>
<Layout>
<!-- 在导航栏后插入自定义组件 -->
<template #nav-bar-content-after>
<MyCustomComponent />
</template>
</Layout>
</template>可用的布局插槽
| 插槽 | 位置 |
|---|---|
layout-top |
页面顶部 |
layout-bottom |
页面底部 |
nav-bar-title-before |
导航栏标题前 |
nav-bar-title-after |
导航栏标题后 |
nav-bar-content-before |
导航栏内容前 |
nav-bar-content-after |
导航栏内容后 |
sidebar-nav-before |
侧边栏导航前 |
sidebar-nav-after |
侧边栏导航后 |
page-top |
页面内容顶部 |
page-bottom |
页面内容底部 |
部署
部署到 GitHub Pages
方法一:手动部署
# 构建
npm run docs:build
# 将 dist 目录内容推送到 gh-pages 分支
cd docs/.vitepress/dist
git init
git add -A
git commit -m "deploy"
git push -f git@github.com:username/repo.git main:gh-pages方法二:GitHub Actions 自动部署
创建 .github/workflows/deploy.yml:
name: Deploy VitePress
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
- run: npm ci
- run: npm run docs:build
- uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: docs/.vitepress/dist部署到 Vercel
- 将代码推送到 GitHub
- 在 Vercel 导入项目
- 设置构建命令:
npm run docs:build - 设置输出目录:
docs/.vitepress/dist
部署到 Netlify
- 将代码推送到 GitHub
- 在 Netlify 导入项目
- 构建命令:
npm run docs:build - 发布目录:
docs/.vitepress/dist
常用插件和工具
搜索功能
VitePress 默认内置了基于标题的搜索,如需全文搜索,可集成 Algolia DocSearch:
// .vitepress/config.js
export default {
themeConfig: {
search: {
provider: 'algolia',
options: {
appId: 'YOUR_APP_ID',
apiKey: 'YOUR_API_KEY',
indexName: 'YOUR_INDEX_NAME'
}
}
}
}评论系统
集成 Gitalk 或 Artalk:
// 在自定义布局组件中添加评论统计工具
在 .vitepress/theme/index.js 中引入统计脚本。
总结
VitePress 是一个现代化、高性能的静态网站生成器,特别适合:
- 技术文档站点
- Vue 生态项目文档
- 需要快速开发体验的团队
- 喜欢 Vue 3 和 Vite 的开发者
优点:
- 开发体验极佳(Vite HMR)
- 配置简单,约定优于配置
- Vue 3 驱动,扩展性强
- 默认主题美观实用
缺点:
- 主题生态相对较新
- 复杂定制需要 Vue 知识
- 博客功能不如 Hexo 丰富
如果你正在寻找一个现代化的文档工具,VitePress 绝对值得尝试!
系列总结
至此,我们已经完成了本系列的四篇文章:
希望这个系列能帮助你选择和使用适合自己的博客框架!