Hexo 博客框架从入门到精通

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

前言

在上一篇系列文章中,我们对主流博客框架进行了全面对比。本文将深入讲解 Hexo 博客框架,从目录结构、配置优化,到主题开发、插件使用和 SEO 优化,帮助你全面掌握 Hexo。

Hexo 目录结构详解

一个标准的 Hexo 项目目录结构如下:

my-blog/
├── .github/              # GitHub 相关配置(Actions 等)
├── node_modules/         # npm 依赖(不要手动修改)
├── public/               # 生成的静态文件目录
├── scaffolds/            # 文章/页面模板
│   ├── draft.md          # 草稿模板
│   ├── page.md           # 页面模板
│   └── post.md           # 文章模板
├── scripts/              # 自定义脚本目录
├── source/               # 源文件目录(重要!)
│   ├── _data/            # 数据文件(yml/json 格式)
│   ├── _posts/           # 博客文章目录
│   ├── about/            # 关于页面
│   ├── categories/       # 分类页(自动生成)
│   └── tags/             # 标签页(自动生成)
├── themes/               # 主题目录
│   └── next/             # 使用的主题
├── _config.yml           # 站点配置文件(重要!)
├── _config.next.yml      # 主题配置文件(主题提供)
├── package.json          # 项目依赖信息
└── .gitignore            # Git 忽略文件

关键目录说明

目录/文件 作用
source/_posts/ 所有博客文章存放处,支持子目录分类
source/ 下其他目录 会被复制到 public/,作为独立页面
themes/ 存放所有主题,当前使用的主题在 _config.yml 中指定
scaffolds/ 新建文章时的模板,可自定义默认 front matter
public/ hexo generate 后生成的静态 HTML 文件

配置文件详解

Hexo 有两层配置:站点配置(_config.yml)和主题配置(各主题自带)。

站点配置 _config.yml 核心选项

永久链接(Permalink)格式

Hexo 支持多种永久链接格式:

变量 说明 示例
:year 年份 2021
:month 月份 10
:day 日期 01
:title 文章标题(slug) my-post
:id 文章 ID 1
:category 分类 tech

推荐配置:

# SEO 友好,包含分类
permalink: :category/:title/

# 或按日期组织
permalink: :year/:month/:day/:title/

配置优化技巧

1. 使用独立的主题配置文件

从 Hexo 5.0 开始,支持独立的主题配置文件,避免修改主题文件:

# 将主题默认配置复制到站点根目录
cp themes/next/_config.yml _config.next.yml

然后在 _config.yml 中:

theme: next
# 无需在 theme_config 中写配置,会自动读取 _config.next.yml

2. 文章资源文件夹

启用文章资源文件夹,每篇文章可以有独立的资源目录:

post_asset_folder: true

启用后,创建文章时会同时创建同名文件夹:

source/_posts/
├── my-post.md
└── my-post/              # 文章资源文件夹
    ├── image1.png
    └── code.zip

在文章中使用资源:

![图片](my-post/image1.png)

3. 草稿功能

Hexo 支持草稿,草稿不会发布到正式站点:

# 创建草稿
hexo new draft "草稿文章"

# 预览草稿(本地服务器)
hexo server --drafts

# 发布草稿(移到 _posts 目录)
hexo publish "草稿文章"

主题开发基础

主题目录结构

themes/my-theme/
├── _config.yml          # 主题配置
├── layout/              # 布局模板
│   ├── layout.ejs       # 主布局
│   ├── index.ejs        # 首页
│   ├── post.ejs         # 文章页
│   ├── archive.ejs      # 归档页
│   ├── category.ejs     # 分类页
│   ├── tag.ejs          # 标签页
│   └── page.ejs         # 独立页面
├── source/              # 静态资源
│   ├── css/
│   ├── js/
│   └── images/
└── scripts/             # 主题脚本

模板语法(EJS 示例)

Hexo 主题通常使用 EJS 或 Swig 模板引擎:

<!-- layout.ejs -->
<!DOCTYPE html>
<html>
<head>
    <title><%- config.title %></title>
    <link rel="stylesheet" href="<%- url_for('css/style.css') %>">
</head>
<body>
    <%- body %>
</body>
</html>

常用 Hexo 变量

变量 说明
config 站点配置对象
page 当前页面对象
site 全站数据(文章、页面、分类、标签)
url_for() 生成 URL
theme 主题配置对象

插件生态

Hexo 有丰富的插件生态,分为两类:

1. 核心插件(官方维护)

插件 功能
hexo-generator-archive 生成归档页
hexo-generator-category 生成分类页
hexo-generator-tag 生成标签页
hexo-generator-feed 生成 RSS 订阅
hexo-generator-sitemap 生成站点地图
hexo-deployer-git Git 部署

2. 实用第三方插件

# 搜索功能(Algolia)
npm install hexo-algolia --save

# 阅读时间统计
npm install hexo-reading-time --save

# 文章字数统计
npm install hexo-wordcount --save

# 本地搜索
npm install hexo-generator-search --save

# 图片懒加载
npm install hexo-lazyload-image --save

# 压缩 HTML/CSS/JS
npm install hexo-all-minifier --save

SEO 优化

1. 添加站点地图

npm install hexo-generator-sitemap --save

配置 _config.yml:

sitemap:
  path: sitemap.xml

2. 添加 RSS 订阅

npm install hexo-generator-feed --save

配置:

feed:
  type: atom
  path: atom.xml
  limit: 20

3. 自定义页面头部

在文章的 front matter 中添加 SEO 相关字段:

---
title: 文章标题
date: 2021-10-01
tags: [Hexo, SEO]
description: 这是文章的详细描述,会显示在搜索结果中
keywords: Hexo, SEO优化, 博客
---

4. 添加 Google Analytics

在主题配置中添加跟踪 ID:

# Next 主题示例
google_analytics:
  tracking_id: UA-XXXXXXXXX-X

5. 添加自定义域名和 HTTPS

参考基础版教程中的自定义域名配置。

Next 主题进阶配置

添加评论系统

Next 主题内置多种评论系统支持:

# _config.next.yml
comments:
  active: gitalk
  gitalk:
    clientID: your-client-id
    clientSecret: your-client-secret
    repo: your-repo
    owner: your-username
    admin: [your-username]

支持的评论系统:Gitalk、Valine、Disqus、Utterances 等。

添加文章打赏

reward:
  enable: true
  comment: 坚持原创技术分享,您的支持将鼓励我继续创作!
  wechatpay: /images/wechatpay.png
  alipay: /images/alipay.png

添加社交分享

social_share:
  enable: true
  sites: wechat, weibo, qq, qzone, twitter, facebook

常见问题解决

问题1:生成速度慢

解决:

# 使用 hexo 的缓存功能
hexo clean  # 清理缓存
hexo generate --force  # 强制重新生成

# 或安装增量生成插件
npm install hexo-browsersync --save

问题2:部署后样式丢失

原因:root 配置不正确

解决:确认 _config.yml 中的 root 设置:

# 如果站点在子目录,如 https://domain.com/blog/
root: /blog/

# 如果在根目录
root: /

问题3:图片路径错误

解决:使用 post_asset_folder: true 并配合标签插件:

{% asset_img image.png 图片描述 %}

总结

通过本文,你应该已经掌握了 Hexo 的核心知识:

  1. 目录结构:理解各目录的作用
  2. 配置优化:使用独立主题配置、资源文件夹、草稿功能
  3. 主题开发:了解主题的基本结构和模板语法
  4. 插件使用:安装和配置常用插件
  5. SEO 优化:站点地图、RSS、Google Analytics

在下一篇文章中,我们将介绍 Hugo 博客框架详解,看看这个"速度之王"有何过人之处。