hexo 学习 0012:hexo 主题 & 插件扩展配置

在 Hexo 的使用过程中,核心功能往往需要通过“扩展”来增强。扩展主要分为两大类:主题(Themes)插件(Plugins)。本文将重点讲解如何在站点配置文件中管理这些扩展,特别是如何在不修改主题源文件的情况下自定义主题配置。

核心配置项说明

theme
这个配置项用于指定当前站点所使用的主题名称。Hexo 会去 themes 目录下寻找对应名称的文件夹。例如,如果你将 theme 设置为 next,Hexo 会加载 themes/next 下的文件。值得注意的是,如果你将此值设置为 false,则会禁用主题功能,这通常用于仅生成 API 数据或特殊用途的场景。

theme_config
这是一个非常实用的配置项,它允许你将主题的配置直接写在站点的 _config.yml 文件中。通常情况下,主题的配置需要在 themes/主题名/_config.yml 中修改。但通过 theme_config,你可以将这些配置集中管理,避免直接修改主题目录下的文件。当你升级主题文件(通常意味着覆盖整个主题文件夹)时,写在站点配置中的 theme_config 不会丢失,从而保护你的个性化设置。

配置示例

以下是一个典型的扩展配置示例,展示了如何指定主题以及如何通过 theme_config 覆盖主题内部的设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/

# 指定使用名为 'landscape' 的主题
# Hexo 会自动加载 themes/landscape/ 目录下的文件
theme: landscape

# theme_config 用于存放当前主题的特定配置
# 这里的配置会覆盖 themes/landscape/_config.yml 中的同名配置
theme_config:
# 假设 landscape 主题支持设置菜单
menu:
home: /
archives: /archives
categories: /categories

# 假设主题支持设置是否显示侧边栏
sidebar: true

# 假设主题支持自定义 CSS 路径
css: style/custom.css

概念辨析:站点配置 vs 主题配置

在 Hexo 中,_config.yml 文件和 theme_config 容易混淆,它们的作用范围有本质区别:

  • 站点配置 (_config.yml 根层级):控制 Hexo 的核心行为,如网站的 URL、根目录、分页设置、默认分类、部署方式等。这些设置是全局的,不依赖于特定主题。
  • 主题配置 (theme_config 或主题目录下的 _config.yml):仅控制网站的外观和展示逻辑。例如菜单结构、侧边栏小工具、颜色方案、字体设置等。这些配置只对当前指定的主题生效。

简单来说,站点配置决定了“有什么内容”以及“怎么生成”,而主题配置决定了“长什么样”。

注意事项

  • 配置优先级theme_config 中的设置会覆盖主题目录下 _config.yml 中的同名设置。如果你在两个地方都定义了 menu,站点配置文件中的 menu 将生效。
  • 主题依赖theme_config 的具体写法完全取决于你当前使用的主题。不同的主题(如 Next、Butterfly、Yilia)支持的配置项完全不同。你需要查阅对应主题的文档来编写 theme_config
  • 禁用主题:除非你有特殊需求(如开发 API 接口),否则不要将 theme 设置为 false,否则生成的站点将没有样式和布局。