VitePress 详解:Vue驱动的静态网站生成器

2021-12-01 网站/博客搭建

前言

在上一篇系列文章中,我们介绍了 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 的核心优势

  1. 基于 Vite:享受 Vite 的极速热更新和构建
  2. Vue 3 驱动:可以使用 Vue 3 的所有特性
  3. 配置简单:约定优于配置,上手快
  4. 默认主题美观:开箱即用的文档主题
  5. 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)。

基础配置

多语言配置

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

  1. 将代码推送到 GitHub
  2. 在 Vercel 导入项目
  3. 设置构建命令:npm run docs:build
  4. 设置输出目录:docs/.vitepress/dist

部署到 Netlify

  1. 将代码推送到 GitHub
  2. 在 Netlify 导入项目
  3. 构建命令:npm run docs:build
  4. 发布目录: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 绝对值得尝试!

系列总结

至此,我们已经完成了本系列的四篇文章:

  1. 常见博客框架及文档系统详解(系列综述)
  2. Hexo 博客框架从入门到精通
  3. Hugo 博客框架详解:最快的静态网站生成器
  4. VitePress 详解:Vue驱动的静态网站生成器(本文)

希望这个系列能帮助你选择和使用适合自己的博客框架!