个人博客搭建指南

94 阅读12分钟

个人博客搭建指南

从零开始,打造属于你自己的技术博客

文档版本: 1.0 最后更新: 2025-11-17 适用人群: 想要搭建个人博客的开发者和技术爱好者 技术栈: VuePress 2.0 + GitHub Pages


目录

[[toc]]


为什么要搭建个人博客

对个人成长的价值

知识沉淀

  • 系统化整理所学知识
  • 加深对技术的理解
  • 建立个人知识库
  • 方便日后查阅复习

技能提升

  • 提高技术写作能力
  • 锻炼表达和总结能力
  • 学习前端开发技术
  • 掌握运维部署技能

职业发展

  • 展示技术实力
  • 建立个人品牌
  • 增加面试竞争力
  • 结识同行朋友

为什么选择自建而不是平台

优势对比:

特性自建博客第三方平台
自由度✅ 完全自由❌ 受平台限制
个性化✅ 高度定制❌ 模板固定
数据所有权✅ 完全拥有❌ 平台控制
技术学习✅ 学到很多❌ 学习较少
成本✅ 免费(GitHub Pages)✅/❌ 部分免费
上手难度⚠️ 需要学习✅ 简单快速

结论: 如果你是技术人员,想要更高的自由度和学习机会,自建博客是更好的选择。


技术选型对比

主流静态站点生成器

1. VuePress (本教程选择)

优点:

  • 🎯 专为技术文档设计
  • 📝 Markdown 支持完善
  • 🚀 Vue 3 驱动,性能优秀
  • 🎨 主题系统完善
  • 🔌 插件生态丰富
  • 📱 移动端友好

缺点:

  • 中文文档相对较少
  • 需要一定 Vue 基础(非必需)

适合人群:

  • 技术博客作者
  • 前端开发者
  • Vue 爱好者
2. Hexo

优点:

  • 📚 中文文档丰富
  • 🎨 主题数量多
  • 🔧 配置简单
  • 👥 社区活跃

缺点:

  • 基于 EJS,不够现代
  • 构建速度较慢
  • 主题质量参差不齐

适合人群:

  • 博客新手
  • 追求简单的用户
3. Hugo

优点:

  • ⚡ 构建速度极快
  • 🎯 功能强大
  • 🌍 国际化支持好

缺点:

  • Go 语言,不够亲和
  • 中文资源较少
  • 学习曲线陡峭

适合人群:

  • 大型博客站点
  • 追求极致性能
4. Docusaurus

优点:

  • 📖 文档站点专业
  • ⚛️ React 生态
  • 🎨 Facebook 出品

缺点:

  • 偏向文档而非博客
  • 配置相对复杂

适合人群:

  • React 开发者
  • 开源项目文档

本教程选择 VuePress 的理由

  1. 技术先进: Vue 3 + Vite,开发体验好
  2. 文档友好: 专为技术写作设计
  3. 易于定制: 可以轻松添加 Vue 组件
  4. 性能优秀: 构建快速,加载迅速
  5. 生态完善: 插件和主题丰富

环境准备

必需软件安装

1. Node.js

推荐版本: 18.x 或更高

安装方法:

Windows:

  1. 访问 Node.js 官网
  2. 下载 LTS 版本
  3. 运行安装程序
  4. 验证安装:
node -v
# 输出: v18.x.x 或更高
npm -v
# 输出: 9.x.x 或更高

macOS:

# 使用 Homebrew
brew install node@18

# 验证
node -v
npm -v

Linux (Ubuntu/Debian):

# 使用 NodeSource
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

# 验证
node -v
npm -v
2. Git

安装方法:

Windows:

  1. 访问 Git 官网
  2. 下载安装程序
  3. 安装时选择默认选项
  4. 验证:
git --version

macOS:

brew install git
git --version

Linux:

sudo apt-get install git
git --version

配置 Git:

git config --global user.name "你的名字"
git config --global user.email "your_email@example.com"
3. 代码编辑器

推荐 Visual Studio Code:

  1. 访问 VS Code 官网
  2. 下载并安装
  3. 安装推荐插件:
    • VeturVolar - Vue 支持
    • Markdown All in One - Markdown 增强
    • GitLens - Git 可视化
    • Chinese Language Pack - 中文界面

账号注册

GitHub 账号
  1. 访问 GitHub
  2. 点击 Sign up 注册
  3. 验证邮箱
  4. 完善个人资料

为什么需要 GitHub:

  • 托管博客源代码
  • 使用 GitHub Pages 免费部署
  • 版本控制和备份

快速开始

如果你想直接使用本项目作为模板快速搭建,可以按以下步骤:

方式一:克隆本项目

# 1. 克隆项目
git clone https://github.com/zephyrnan/zephyrnan.github.io.git my-blog
cd my-blog

# 2. 删除原有 Git 历史
rm -rf .git
git init

# 3. 安装依赖
npm install

# 4. 启动开发服务器
npm run dev

# 5. 浏览器访问 http://localhost:8080

方式二:使用模板创建

  1. 访问 本项目 GitHub 仓库
  2. 点击 "Use this template" 按钮
  3. 填写仓库信息:
    • Repository name: 你的用户名.github.io
    • Description: 个人博客
    • Public: 选择 Public
  4. 克隆到本地:
git clone https://github.com/你的用户名/你的用户名.github.io.git
cd 你的用户名.github.io
npm install
npm run dev

个性化配置

修改基本信息:

编辑 docs/.vuepress/config.js:

export default defineUserConfig({
  lang: 'zh-CN',
  title: '你的博客名称',          // 修改这里
  description: '你的博客描述',    // 修改这里
  base: '/',
})

更换图片:

  • docs/.vuepress/public/author.jpg - 替换为你的头像
  • docs/.vuepress/public/bg.jpg - 替换为你的网站图标

修改关于页面:

编辑 docs/about.md:

# 关于我

你的个人简介...

## 技能栈
- 你的技能1
- 你的技能2

## 联系方式
- GitHub: [你的GitHub](https://github.com/你的用户名)
- Email: your_email@example.com

从零搭建详细步骤

如果你想完全从零开始学习,跟着这个步骤来。

第一步:创建项目

# 1. 创建项目目录
mkdir my-blog
cd my-blog

# 2. 初始化 npm 项目
npm init -y

# 3. 安装 VuePress
npm install -D vuepress@next @vuepress/bundler-vite@next @vuepress/theme-default@next

# 4. 安装 Vue 3
npm install -D vue@next

第二步:创建目录结构

# 创建文档目录
mkdir -p docs/.vuepress/public
mkdir -p docs/.vuepress/components
mkdir -p docs/posts

目录结构:

my-blog/
├── docs/
│   ├── .vuepress/
│   │   ├── components/      # Vue 组件
│   │   ├── public/          # 静态资源
│   │   ├── config.js        # 配置文件
│   │   └── client.js        # 客户端配置
│   ├── posts/               # 博客文章
│   ├── README.md            # 首页
│   └── about.md             # 关于页面
├── package.json
└── .gitignore

第三步:配置 package.json

编辑 package.json,添加脚本:

{
  "name": "my-blog",
  "version": "1.0.0",
  "description": "我的个人博客",
  "scripts": {
    "dev": "vuepress dev docs",
    "build": "vuepress build docs",
    "clean": "rm -rf docs/.vuepress/.cache docs/.vuepress/.temp docs/.vuepress/dist"
  },
  "keywords": ["blog", "vuepress"],
  "author": "你的名字",
  "license": "MIT"
}

第四步:创建配置文件

创建 docs/.vuepress/config.js:

// 导入VuePress核心模块
import { viteBundler } from '@vuepress/bundler-vite'  // Vite打包工具,比Webpack更快
import { defaultTheme } from '@vuepress/theme-default'  // 默认主题
import { defineUserConfig } from 'vuepress'  // 配置定义函数

export default defineUserConfig({
  // 语言设置
  lang: 'zh-CN',  // 设置网站语言为中文,影响默认文本和日期格式

  // 网站标题(显示在浏览器标签和页面header)
  title: '我的技术博客',  // 会显示在每个页面的标题栏

  // 网站描述(用于SEO,显示在搜索结果)
  description: '记录学习与成长',  // 会被搜索引擎索引

  // 部署基础路径
  base: '/',  // GitHub用户站点用'/',项目站点用'/仓库名/'

  // 网站图标
  head: [
    ['link', { rel: 'icon', href: '/favicon.ico' }],  // favicon路径相对于public目录
  ],

  // 打包工具配置
  bundler: viteBundler(),  // 使用Vite进行快速构建,支持HMR热更新

  // 主题配置
  theme: defaultTheme({
    // Logo(显示在导航栏左侧)
    logo: '/logo.png',  // 路径相对于public目录

    // 导航栏配置
    navbar: [
      { text: '首页', link: '/' },  // text:显示文字, link:跳转路径
      { text: '文章', link: '/posts/' },  // 以/结尾表示目录首页
      { text: '关于', link: '/about.md' },  // 可以直接链接到md文件
    ],

    // 侧边栏配置(支持多级菜单)
    sidebar: {
      '/posts/': [  // 指定/posts/路径下的侧边栏
        {
          text: '文章列表',  // 分组标题
          children: [  // 子菜单项
            '/posts/my-first-post.md',  // 文章路径
          ],
        },
      ],
    },

    // 仓库配置(显示在导航栏右侧)
    repo: 'https://github.com/你的用户名/你的仓库',  // GitHub仓库地址

    // 编辑链接(显示"编辑此页"按钮)
    editLink: false,  // 关闭编辑链接功能

    // 最后更新时间(自动从Git获取)
    lastUpdated: true,  // 开启显示最后更新时间
    lastUpdatedText: '最后更新',  // 自定义显示文本

    // 贡献者列表(从Git历史获取)
    contributors: false,  // 关闭贡献者显示
  }),
})

⚠️ 注意事项:

  • base路径配置: GitHub用户站点(username.github.io)使用base: '/',项目站点(username.github.io/repo)使用base: '/repo/',配置错误会导致资源404
  • public目录: 所有静态资源(图片、favicon等)必须放在docs/.vuepress/public/目录,引用时路径从根目录开始
  • 导航栏链接: 链接以/开头表示从根目录开始,以.md结尾会自动转换为HTML路径
  • 侧边栏配置: 可以按路径分组配置不同侧边栏,支持嵌套children
  • Git集成: lastUpdatedcontributors需要在Git仓库中才能正常工作,本地非Git环境不显示
  • 构建时间: Vite打包比Webpack快3-5倍,大型项目推荐使用
// 常见错误:base配置错误
// 项目站点错误配置
base: '/',  // ❌ 项目站点不能用根路径

// 正确配置
base: '/my-blog/',  // ✅ 项目站点必须加仓库名

// 常见错误:静态资源路径错误
logo: './public/logo.png',  // ❌ 不要包含public
logo: '/logo.png',  // ✅ 直接从根路径开始

// 常见错误:侧边栏路径不一致
sidebar: {
  '/posts': [...],  // ❌ 缺少结尾斜杠
  '/posts/': [...],  // ✅ 路径要以/结尾
}

🎯 实际应用场景:

// 场景1:多语言配置
export default defineUserConfig({
  locales: {
    '/': {
      lang: 'zh-CN',
      title: '我的博客',
    },
    '/en/': {
      lang: 'en-US',
      title: 'My Blog',
    }
  },
  theme: defaultTheme({
    locales: {
      '/': { navbar: [...] },
      '/en/': { navbar: [...] }
    }
  })
})

// 场景2:多级导航菜单
navbar: [
  {
    text: '技术分类',
    children: [
      { text: '前端', link: '/frontend/' },
      { text: '后端', link: '/backend/' },
      { text: '数据库', link: '/database/' }
    ]
  }
]

// 场景3:动态侧边栏(自动从目录生成)
import { getDirname, path } from '@vuepress/utils'
import fs from 'fs'

const __dirname = getDirname(import.meta.url)
const postsPath = path.resolve(__dirname, '../../posts')
const postFiles = fs.readdirSync(postsPath).filter(f => f.endsWith('.md'))

sidebar: {
  '/posts/': [
    {
      text: '全部文章',
      children: postFiles.map(f => `/posts/${f}`)
    }
  ]
}

// 场景4:添加自定义head标签(SEO优化)
head: [
  ['link', { rel: 'icon', href: '/favicon.ico' }],
  ['meta', { name: 'keywords', content: 'Vue,JavaScript,前端' }],
  ['meta', { name: 'author', content: '你的名字' }],
  ['meta', { property: 'og:title', content: '我的博客' }],
  ['meta', { property: 'og:image', content: '/og-image.jpg' }],
  // 百度统计
  ['script', {}, `
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?你的ID";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
  `]
]

// 场景5:自定义404页面和首页布局
export default defineUserConfig({
  theme: defaultTheme({
    notFound: ['页面不存在', '找不到该页面'],
    backToHome: '返回首页',
    home: '/',
    // 自定义容器样式
    tip: '提示',
    warning: '警告',
    danger: '危险'
  })
})

第五步:创建首页

创建 docs/README.md:

---
home: true
heroText: 欢迎来到我的博客
tagline: 记录技术,分享成长
actions:
  - text: 开始阅读
    link: /posts/
    type: primary
  - text: 关于我
    link: /about.md
    type: secondary
features:
  - title: 📝 技术笔记
    details: 记录学习过程中的技术知识点
  - title: 💡 实践经验
    details: 分享项目开发中的实战经验
  - title: 🔧 工具分享
    details: 推荐好用的开发工具和资源
footer: MIT Licensed | Copyright © 2025-present
---

## 最新文章

- [我的第一篇博客](/posts/my-first-post.md)

## 关于本站

这是一个基于 VuePress 2.0 搭建的个人技术博客。

第六步:创建文章

创建 docs/posts/README.md:

# 文章列表

## 全部文章

- [我的第一篇博客](/posts/my-first-post.md)

创建 docs/posts/my-first-post.md:

---
title: 我的第一篇博客
date: 2025-11-17
categories:
  - 随笔
tags:
  - 开始
---

# 我的第一篇博客

> 记录搭建博客的过程

## 为什么搭建博客

这里写你搭建博客的原因...

## 搭建过程

这里记录你的搭建过程...

## 总结

这里写你的总结...

第七步:创建关于页面

创建 docs/about.md:

# 关于我

## 个人简介

你好,我是 XXX...

## 技能栈

- **前端**: HTML, CSS, JavaScript
- **框架**: Vue, React
- **后端**: Node.js
- **数据库**: MySQL

## 联系方式

- GitHub: [你的用户名](https://github.com/你的用户名)
- Email: your_email@example.com
- 微信: your_wechat

## 关于本站

本站使用 VuePress 2.0 搭建,托管在 GitHub Pages。

技术栈:
- VuePress 2.0
- Vue 3
- Vite
- GitHub Pages

第八步:配置 .gitignore

创建 .gitignore:

# Node
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
package-lock.json

# VuePress
docs/.vuepress/.cache/
docs/.vuepress/.temp/
docs/.vuepress/dist/

# IDE
.idea/
.vscode/
*.suo
*.ntvs*
*.njsproj
*.sln

# OS
.DS_Store
Thumbs.db

第九步:测试运行

# 启动开发服务器
npm run dev

访问 http://localhost:8080,查看效果。

如果一切正常,你应该能看到博客首页!


内容创作指南

Markdown 基础

标题
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
文本样式
**粗体文本**
*斜体文本*
~~删除线~~
`行内代码`
列表
无序列表:
- 项目 1
- 项目 2
  - 子项目 2.1
  - 子项目 2.2

有序列表:
1. 第一项
2. 第二项
3. 第三项
链接和图片
[链接文本](https://example.com)
![图片描述](/images/example.jpg)
引用
> 这是一段引用文本
> 可以有多行
代码块
```javascript
function hello() {
  console.log('Hello World')
}
```
表格
| 列1 | 列2 | 列3 |
|-----|-----|-----|
| 内容1 | 内容2 | 内容3 |
| 内容4 | 内容5 | 内容6 |

VuePress 扩展语法

自动目录
[[toc]]
提示容器
::: tip 提示
这是一个提示
:::

::: warning 警告
这是一个警告
:::

::: danger 危险
这是危险警告
:::

::: details 点击查看详情
隐藏的详细内容
:::
代码高亮
```javascript{1,3-5}
console.log('第1行高亮')
console.log('不高亮')
console.log('第3-5行高亮')
console.log('高亮')
console.log('高亮')
```

文章模板

推荐的文章结构:

---
title: 文章标题
date: 2025-11-17
categories:
  - 分类名称
tags:
  - 标签1
  - 标签2
---

# 文章标题

> 文章简介或引言

## 目录

[[toc]]

## 引言

为什么写这篇文章...

## 正文部分一

### 小节标题

内容...

#### 更小的标题

细节内容...

## 正文部分二

### 示例代码

```javascript
// 代码示例
const example = 'Hello World'

图片说明

示例图片

总结

文章总结...

参考资料


### 写作建议

**内容质量:**
- ✅ 标题简洁明了
- ✅ 结构清晰有逻辑
- ✅ 代码示例完整可运行
- ✅ 配图清晰有说明
- ✅ 总结提炼要点

**写作技巧:**
- 使用简单直白的语言
- 多用例子和图示
- 代码要有注释
- 避免长篇大论
- 定期更新修正

**SEO 优化:**
- 标题包含关键词
- 合理使用标题层级
- 添加 meta 描述
- 内链外链结合

---

## 功能扩展

### 添加评论系统

#### 方案选择

**Valine (推荐):**
- ✅ 无需登录
- ✅ Markdown 支持
- ✅ 访问量统计
- ❌ 需要 LeanCloud

**Giscus:**
- ✅ 基于 GitHub Discussions
- ✅ 无需额外服务
- ❌ 需要 GitHub 账号

**Gitalk:**
- ✅ 基于 GitHub Issues
- ❌ 需要 GitHub OAuth

#### 集成 Valine 评论

**1. 注册 LeanCloud**

1. 访问 [LeanCloud](https://www.leancloud.cn/)
2. 注册并登录
3. 创建应用(开发版免费)
4. 获取 AppID 和 AppKey

**2. 安装 Valine**

```bash
npm install valine

3. 创建评论组件

创建 docs/.vuepress/components/ValineComment.vue:

<template>
  <!-- 评论容器,Valine会在此挂载 -->
  <div id="vcomments"></div>
</template>

<script>
export default {
  name: 'ValineComment',  // 组件名称,用于在Markdown中引用
  mounted() {
    // 组件挂载后初始化评论系统
    this.initValine()  // 页面加载完成后才执行,确保DOM已渲染
  },
  methods: {
    async initValine() {
      // 动态导入 Valine (按需加载,减小初始包体积)
      const Valine = (await import('valine')).default  // 使用ES6 dynamic import

      // 创建Valine实例并配置
      new Valine({
        el: '#vcomments',  // 挂载到的DOM元素选择器
        appId: '你的AppID',  // LeanCloud应用ID(在LeanCloud控制台获取)
        appKey: '你的AppKey',  // LeanCloud应用Key(在LeanCloud控制台获取)
        placeholder: '说点什么吧...',  // 评论框占位文字
        avatar: 'monsterid',  // 头像风格(可选:identicon/wavatar/robohash等)
        visitor: true,  // 开启文章访问量统计
        highlight: true,  // 代码高亮(评论中的代码块)
        recordIP: false,  // 不记录评论者IP地址(保护隐私)
      })
      // 注意:初始化后Valine会自动加载该页面的所有评论
    }
  }
}
</script>

⚠️ 注意事项:

  • LeanCloud配置: 必须先在LeanCloud注册账号并创建应用,否则评论系统无法工作
  • 安全域名: 必须在LeanCloud控制台设置→安全中心→Web安全域名中添加https://你的域名localhost:8080,否则会报CORS错误
  • 动态导入: 使用import('valine')而不是import Valine from 'valine',避免首屏加载过大
  • 挂载时机: 必须在mounted()钩子中初始化,在created()中会因DOM未渲染而报错
  • 唯一ID: Valine根据页面URL自动区分不同文章的评论,确保每篇文章URL唯一
  • 数据存储: 评论数据存储在LeanCloud的Comment表中,可以在控制台查看和管理
  • 实名制: 如需实名评论,需要配置requiredFields: ['nick', 'mail']
// 常见错误:在created钩子中初始化
created() {
  this.initValine()  // ❌ 此时DOM未渲染,#vcomments不存在
}

mounted() {
  this.initValine()  // ✅ DOM已渲染,可以挂载
}

// 常见错误:同步导入Valine
import Valine from 'valine'  // ❌ 会增加首屏包体积

const Valine = (await import('valine')).default  // ✅ 按需加载

// 常见错误:未配置安全域名
// 浏览器控制台会显示:
// Access to XMLHttpRequest has been blocked by CORS policy
// 解决:在LeanCloud控制台添加域名白名单

🎯 实际应用场景:

<!-- 场景1:多语言评论系统 -->
<script>
export default {
  methods: {
    async initValine() {
      const Valine = (await import('valine')).default
      const lang = this.$page.lang === 'en-US' ? 'en' : 'zh-CN'

      new Valine({
        el: '#vcomments',
        appId: '你的AppID',
        appKey: '你的AppKey',
        lang: lang,  // 动态设置语言
        placeholder: lang === 'zh-CN' ? '说点什么...' : 'Leave a comment...'
      })
    }
  }
}
</script>

<!-- 场景2:实名评论+邮件通知 -->
<script>
export default {
  methods: {
    async initValine() {
      const Valine = (await import('valine')).default

      new Valine({
        el: '#vcomments',
        appId: '你的AppID',
        appKey: '你的AppKey',
        requiredFields: ['nick', 'mail'],  // 必填昵称和邮箱
        notify: true,  // 开启邮件通知(需配置LeanCloud邮件服务)
        verify: true,  // 开启验证码(防止垃圾评论)
        pageSize: 10,  // 每页显示10条评论
        avatar: 'wavatar',  // 更换头像风格
      })
    }
  }
}
</script>

<!-- 场景3:深色主题适配 -->
<template>
  <div id="vcomments" :class="isDark ? 'valine-dark' : ''"></div>
</template>

<script>
export default {
  computed: {
    isDark() {
      return this.$store.state.theme === 'dark'  // 根据主题状态切换
    }
  },
  methods: {
    async initValine() {
      const Valine = (await import('valine')).default

      new Valine({
        el: '#vcomments',
        appId: '你的AppID',
        appKey: '你的AppKey'
      })
    }
  }
}
</script>

<style scoped>
.valine-dark {
  color-scheme: dark;  /* 深色模式样式 */
}
</style>

<!-- 场景4:带表情包的评论 -->
<script>
export default {
  methods: {
    async initValine() {
      const Valine = (await import('valine')).default

      new Valine({
        el: '#vcomments',
        appId: '你的AppID',
        appKey: '你的AppKey',
        emojiCDN: 'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/bilibili',
        emojiMaps: {
          'tv_doge': '滑稽',
          'tv_ok': 'OK',
          'tv_smile': '微笑'
        }
      })
    }
  }
}
</script>

<!-- 场景5:评论管理后台 -->
<!-- 在LeanCloud控制台可以: -->
<!-- 1. 查看所有评论(数据存储→Comment表) -->
<!-- 2. 删除垃圾评论 -->
<!-- 3. 导出评论数据 -->
<!-- 4. 设置敏感词过滤 -->
<!-- 5. 查看访问量统计(数据存储→Counter表) -->

4. 在文章中使用

# 文章内容

...

## 评论

<ValineComment />

5. 配置安全域名

在 LeanCloud 控制台:

  1. 设置 → 安全中心
  2. Web 安全域名添加:
    • https://你的用户名.github.io
    • localhost:8080

添加搜索功能

npm install -D @vuepress/plugin-search@next

修改 config.js:

import { searchPlugin } from '@vuepress/plugin-search'

export default defineUserConfig({
  plugins: [
    searchPlugin({
      // 搜索框占位符
      locales: {
        '/': {
          placeholder: '搜索',
        },
      },
      // 最大建议数
      maxSuggestions: 10,
    }),
  ],
})

添加阅读时间

npm install -D @vuepress/plugin-reading-time@next
import { readingTimePlugin } from '@vuepress/plugin-reading-time'

export default defineUserConfig({
  plugins: [
    readingTimePlugin(),
  ],
})

添加代码复制按钮

npm install -D @vuepress/plugin-copy-code@next
import { copyCodePlugin } from '@vuepress/plugin-copy-code'

export default defineUserConfig({
  plugins: [
    copyCodePlugin({
      showInMobile: true,
    }),
  ],
})

添加图片缩放

npm install -D @vuepress/plugin-medium-zoom@next
import { mediumZoomPlugin } from '@vuepress/plugin-medium-zoom'

export default defineUserConfig({
  plugins: [
    mediumZoomPlugin(),
  ],
})

添加百度统计

1. 注册百度统计

访问 百度统计

2. 添加网站

创建网站后获取统计代码

3. 配置到博客

修改 config.js:

export default defineUserConfig({
  head: [
    ['script', {}, `
      var _hmt = _hmt || [];
      (function() {
        var hm = document.createElement("script");
        hm.src = "https://hm.baidu.com/hm.js?你的统计ID";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
      })();
    `],
  ],
})

部署上线

GitHub Pages 部署

方法一:使用部署脚本(推荐)

1. 创建部署脚本

创建 deploy.sh:

#!/usr/bin/env sh

# 确保脚本抛出遇到的错误
set -e

# 生成静态文件
npm run build

# 进入生成的文件夹
cd docs/.vuepress/dist

# 如果是发布到自定义域名
# echo 'www.example.com' > CNAME

git init
git add -A
git commit -m 'deploy'

# 如果发布到 https://用户名.github.io
git push -f git@github.com:用户名/用户名.github.io.git main

# 如果发布到 https://用户名.github.io/仓库名
# git push -f git@github.com:用户名/仓库名.git main:gh-pages

cd -

2. 修改权限(macOS/Linux)

chmod +x deploy.sh

3. 执行部署

# Windows Git Bash
bash deploy.sh

# macOS/Linux
./deploy.sh
方法二:GitHub Actions 自动部署

1. 创建工作流文件

创建 .github/workflows/deploy.yml:

name: Deploy to GitHub Pages

on:
  push:
    branches:
      - main  # 监听 main 分支

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18

      - name: Install dependencies
        run: npm ci

      - name: Build
        run: npm run build

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: docs/.vuepress/dist

2. 推送代码

git add .
git commit -m "Add GitHub Actions workflow"
git push

3. 配置 GitHub Pages

  1. 进入仓库 Settings
  2. 找到 Pages 设置
  3. Source 选择 gh-pages 分支
  4. 保存

优点:

  • 推送后自动部署
  • 无需本地构建
  • 构建日志清晰

自定义域名

1. 购买域名

推荐域名商:

2. 配置 DNS

添加 CNAME 记录:

类型: CNAME
主机记录: blog 或 @
记录值: 你的用户名.github.io

3. 添加 CNAME 文件

docs/.vuepress/public/ 创建 CNAME 文件:

blog.example.com

4. 重新部署

npm run build
# 推送或运行部署脚本

5. 等待生效

通常需要 10 分钟到 24 小时。

Vercel 部署(推荐)

优点:

  • 全球 CDN
  • 自动部署
  • 免费 HTTPS
  • 速度更快

步骤:

  1. 访问 Vercel
  2. 使用 GitHub 登录
  3. Import Project
  4. 选择你的博客仓库
  5. 配置:
    • Build Command: npm run build
    • Output Directory: docs/.vuepress/dist
  6. Deploy

SEO 优化

Meta 标签优化

修改 config.js:

export default defineUserConfig({
  head: [
    // 网站图标
    ['link', { rel: 'icon', href: '/favicon.ico' }],

    // 关键词
    ['meta', { name: 'keywords', content: 'JavaScript,Vue,前端开发,技术博客' }],

    // 作者
    ['meta', { name: 'author', content: '你的名字' }],

    // Open Graph
    ['meta', { property: 'og:title', content: '你的博客名称' }],
    ['meta', { property: 'og:description', content: '博客描述' }],
    ['meta', { property: 'og:type', content: 'website' }],
    ['meta', { property: 'og:url', content: 'https://你的域名' }],
    ['meta', { property: 'og:image', content: '/og-image.jpg' }],

    // Twitter Card
    ['meta', { name: 'twitter:card', content: 'summary_large_image' }],
    ['meta', { name: 'twitter:title', content: '你的博客名称' }],
    ['meta', { name: 'twitter:description', content: '博客描述' }],

    // 主题色
    ['meta', { name: 'theme-color', content: '#1e88e5' }],
  ],
})

Sitemap 生成

npm install -D @vuepress/plugin-sitemap@next
import { sitemapPlugin } from '@vuepress/plugin-sitemap'

export default defineUserConfig({
  plugins: [
    sitemapPlugin({
      hostname: 'https://你的域名.com',
    }),
  ],
})

Google Search Console

  1. 访问 Google Search Console
  2. 添加网站
  3. 验证所有权
  4. 提交 sitemap.xml

持续维护

内容更新

定期更新:

  • 每周 1-2 篇新文章
  • 更新过时内容
  • 修正错误

内容规划:

  • 技术学习笔记
  • 项目实战经验
  • 工具使用教程
  • 问题解决方案

性能优化

图片优化:

  • 使用 WebP 格式
  • 压缩图片大小
  • 懒加载图片

代码优化:

  • 减少插件数量
  • 按需加载组件
  • 优化构建配置

备份策略

Git 备份:

# 定期推送到 GitHub
git push origin main

多平台备份:

  • GitHub(主)
  • Gitee(镜像)
  • 本地备份

监控分析

访问统计:

  • 百度统计
  • Google Analytics

性能监控:

  • PageSpeed Insights
  • Lighthouse

常见问题

构建问题

Q: 构建失败怎么办?

A: 清理缓存重试:

npm run clean
rm -rf node_modules package-lock.json
npm install
npm run build

Q: 端口被占用?

A: 更换端口:

npm run dev -- --port 8081

部署问题

Q: GitHub Pages 404?

A: 检查 config.js 中的 base 配置:

  • 用户站点: base: '/'
  • 项目站点: base: '/仓库名/'

Q: CSS 样式丢失?

A: 检查 base 路径配置是否正确。

功能问题

Q: 评论系统不显示?

A:

  1. 检查 LeanCloud 安全域名
  2. 查看浏览器控制台错误
  3. 确认 AppID 和 AppKey 正确

Q: 搜索不工作?

A: 确认已安装搜索插件并正确配置。


进阶优化

主题定制

自定义颜色:

创建 docs/.vuepress/styles/palette.scss:

// 主题色
$accentColor = #1e88e5

// 文本颜色
$textColor = #2c3e50

// 边框颜色
$borderColor = #eaecef

// 代码块背景色
$codeBgColor = #282c34

自定义样式:

创建 docs/.vuepress/styles/index.scss:

// 自定义字体
body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}

// 自定义代码块
div[class*="language-"] {
  border-radius: 8px;
}

// 响应式调整
@media (max-width: 768px) {
  .theme-default-content {
    padding: 1rem;
  }
}

添加动态效果

粒子背景:

client.js 中添加 Canvas 粒子效果(参考本项目源码)。

点击特效:

添加点击 emoji 特效(参考本项目源码)。

返回顶部:

主题自带,或自定义按钮。

PWA 支持

npm install -D @vuepress/plugin-pwa@next
import { pwaPlugin } from '@vuepress/plugin-pwa'

export default defineUserConfig({
  plugins: [
    pwaPlugin({
      skipWaiting: true,
    }),
  ],
})

RSS 订阅

npm install -D @vuepress/plugin-feed@next
import { feedPlugin } from '@vuepress/plugin-feed'

export default defineUserConfig({
  plugins: [
    feedPlugin({
      hostname: 'https://你的域名.com',
    }),
  ],
})

结语

恭喜你!如果你跟着本教程走到这里,你应该已经拥有了一个功能完善的个人博客。

下一步:

  1. 🎨 个性化你的博客主题
  2. ✍️ 开始写第一篇文章
  3. 📢 分享你的博客给朋友
  4. 💪 持续学习和更新

推荐资源:

本项目:

祝你博客写作愉快!📝


💬 评论交流

有任何问题或建议,欢迎在下方留言交流!


作者: 楠渡余生 GitHub: @zephyrnan 最后更新: 2025-11-17 License: MIT