VitePress 博客搭建完全指南
VitePress 是一个基于 Vite 和 Vue 3 的静态站点生成器,专为技术文档和博客而设计。本文将详细介绍如何使用 VitePress 搭建一个功能完整的博客网站。
为什么选择 VitePress?
优势特点
- 极快的开发体验:基于 Vite 的热重载,修改即时生效
- Vue 3 生态:完全支持 Vue 3 组件和 Composition API
- Markdown 增强:支持 Vue 组件、代码高亮、数学公式等
- SEO 友好:服务端渲染,搜索引擎优化
- 主题定制:灵活的主题系统,易于定制
与其他方案对比
| 特性 | VitePress | Hexo | Hugo | Gatsby |
|---|---|---|---|---|
| 构建速度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 学习成本 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| 定制性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 生态系统 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
快速开始
环境准备
bash
# 确保 Node.js 版本 >= 16
node --version
# 创建项目目录
mkdir my-blog
cd my-blog
# 初始化项目
npm init -y安装 VitePress
bash
# 安装 VitePress
npm install -D vitepress
# 初始化 VitePress
npx vitepress init项目结构
my-blog/
├── .vitepress/
│ ├── config.ts # 配置文件
│ └── theme/ # 自定义主题
├── blog/ # 博客文章
├── public/ # 静态资源
├── index.md # 首页
package.json配置详解
基础配置
typescript
// .vitepress/config.ts
import { defineConfig } from 'vitepress'
export default defineConfig({
title: '我的博客',
description: '一个基于 VitePress 的个人博客',
// 主题配置
themeConfig: {
nav: [
{ text: '首页', link: '/' },
{ text: '博客', link: '/blog/' },
{ text: '关于', link: '/about' }
],
sidebar: {
'/blog/': [
{
text: '最新文章',
items: [
{ text: 'VitePress 指南', link: '/blog/vitepress-guide' },
{ text: '第一篇博客', link: '/blog/first-post' }
]
}
]
},
socialLinks: [
{ icon: 'github', link: 'https://github.com/username' }
]
},
// Markdown 配置
markdown: {
lineNumbers: true,
theme: 'github-dark'
}
})多语言支持
typescript
export default defineConfig({
locales: {
root: {
label: '中文',
lang: 'zh-CN'
},
en: {
label: 'English',
lang: 'en-US',
themeConfig: {
nav: [
{ text: 'Home', link: '/en/' },
{ text: 'Blog', link: '/en/blog/' }
]
}
}
}
})主题定制
自定义样式
css
/* .vitepress/theme/custom.css */
:root {
--vp-c-brand: #3498db;
--vp-c-brand-light: #5dade2;
--vp-c-brand-dark: #2980b9;
}
/* 自定义字体 */
.VPDoc {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
}
/* 代码块样式 */
.vp-code-group .tabs {
background: var(--vp-c-bg-mute);
}自定义组件
vue
<!-- .vitepress/theme/components/BlogList.vue -->
<template>
<div class="blog-list">
<article v-for="post in posts" :key="post.url" class="blog-item">
<h3><a :href="post.url">{{ post.title }}</a></h3>
<p class="meta">{{ formatDate(post.date) }}</p>
<p>{{ post.description }}</p>
</article>
</div>
</template>
<script setup>
import { data as posts } from '../data/posts.data.js'
function formatDate(date) {
return new Date(date).toLocaleDateString('zh-CN')
}
</script>内容管理
文章格式
markdown
---
title: 文章标题
date: 2024-01-20
tags: [标签1, 标签2]
description: 文章描述
---
# 文章标题
文章内容...
## 代码示例
```javascript
const greeting = 'Hello VitePress!'
console.log(greeting)数学公式
$$E = mc^2$$
Vue 组件
### 数据加载
```javascript
// .vitepress/theme/data/posts.data.js
import { createContentLoader } from 'vitepress'
export default createContentLoader('blog/*.md', {
transform(rawData) {
return rawData
.map(({ url, frontmatter }) => ({
url,
title: frontmatter.title,
date: frontmatter.date,
description: frontmatter.description
}))
.sort((a, b) => new Date(b.date) - new Date(a.date))
}
})部署指南
GitHub Pages
yaml
# .github/workflows/deploy.yml
name: Deploy VitePress site to Pages
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
- run: npm ci
- run: npm run build
- uses: actions/upload-pages-artifact@v2
with:
path: .vitepress/dist
deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/deploy-pages@v2
id: deploymentVercel 部署
json
{
"buildCommand": "npm run build",
"outputDirectory": ".vitepress/dist",
"installCommand": "npm install"
}性能优化
图片优化
markdown
<!-- 响应式图片 -->
<img src="/image.jpg" alt="描述" loading="lazy" />
<!-- WebP 格式 -->
<picture>
<source srcset="/image.webp" type="image/webp">
<img src="/image.jpg" alt="描述">
</picture>代码分割
typescript
// 动态导入组件
const HeavyComponent = defineAsyncComponent(() =>
import('./components/HeavyComponent.vue')
)最佳实践
1. 内容组织
- 使用清晰的目录结构
- 合理使用标签和分类
- 保持文章命名一致性
2. SEO 优化
- 设置合适的 meta 信息
- 使用语义化的 HTML 结构
- 优化页面加载速度
3. 用户体验
- 响应式设计
- 深色模式支持
- 搜索功能
- 评论系统
总结
VitePress 是一个功能强大且易于使用的静态站点生成器,特别适合技术博客和文档网站。通过本文的介绍,你应该能够:
- 理解 VitePress 的核心概念和优势
- 搭建一个基础的博客网站
- 进行主题定制和功能扩展
- 部署到各种平台
希望这篇指南能帮助你快速上手 VitePress,打造属于自己的博客网站!