Hexo博客:一些非常有用的插件

本文最后更新于 2026年9月12日 晚上

Hexo博客:一些非常有用的插件

前言

使用框架Hexo搭建博客后,你可能需要一些功能,例如:对生成的文件进行压缩,生成站点地图,生成RSS订阅等等。面对官方的插件列表又有些无从下手,这里推荐一些,同时也是我在用的一些插件。

正文

下面示例的配置适用于2026-9-12日前的最新版插件,如果后期插件发生更新,请以官方文档为准。

页面生成器

除了Hexo init自动安装的生成器外,这里介绍一下RSS/Atom订阅生成器和sitemap生成器

hexo-generator-feed

官方仓库:hexo-generator-feed

功能介绍:为你的博客生成feed,别人可以对你的博客进行订阅。

安装:

1
npm install hexo-generator-feed --save

配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
feed:
enable: true # 是否启用插件(默认 true)
type: atom # 订阅类型:atom 或 rss2;也可同时输出两种
# type:
# - atom
# - rss2
path: atom.xml # 输出路径(同时输出时 path 需与 type 顺序对应)
# path:
# - atom.xml
# - rss2.xml
limit: 20 # 订阅内最大文章数;0 或 false 表示全部
hub: # (可选) PubSubHubbub hub 地址,不用则留空
content: false # (可选) true 表示在订阅中包含全文
content_limit: 140 # (可选) 摘要长度,仅在 content=false 且无文章描述时生效
content_limit_delim: ' ' # (可选) 截断摘要时的分隔符,到该字符为止
order_by: -date # 文章排序(默认 -date,最新在前)
icon: icon.png # (可选) 自定义订阅图标
autodiscovery: true # 是否输出 feed 自动发现标签(默认 true)

为某个文章设置图片:
在文章的 front-matter 中设置

1
image: #后面加图片链接

如果你博客也有文章封面图但是和这个配置名称不一样可以写个脚本自动转换。


hexo-generator-sitemap

官方仓库:hexo-generator-sitemap

功能介绍:为站点产生一个标准格式的sitemap,方便搜索引擎收录

安装:

1
npm install hexo-generator-sitemap --save

配置示例:

1
2
3
4
5
6
7
8
9
sitemap:
path:
- sitemap.xml # 输出路径,可同时生成 xml 和 txt 两种
- sitemap.txt
template: ./sitemap_template.xml # (可选) 自定义 xml 模板路径
template_txt: ./sitemap_template.txt # (可选) 自定义 txt 模板路径
rel: false # 是否在站点 header 添加 rel-sitemap 标签(默认 false)
tags: true # 是否包含站点标签页(默认 true)
categories: true # 是否包含站点分类页(默认 true)

排除指定文章/页面
在文章的 front-matter 中设置

1
sitemap: false

功能插件

官方仓库:hexo-abbrlink

功能介绍:文章静态短链接,拒绝过长的链接

安装:

1
npm install hexo-abbrlink --save

配置示例:
步骤 1:
修改 permalink(_config.yml)

1
2
3
4
# 二选一
permalink: posts/:abbrlink/
# 或
permalink: posts/:abbrlink.html

步骤 2:
插件配置(_config.yml)

1
2
3
4
5
6
7
# abbrlink config
abbrlink:
alg: crc32 # 生成算法:crc16(默认)/ crc32
rep: hex # URL 展示形式:dec(默认,十进制)/ hex(十六进制)
drafts: false # 是否为草稿生成 abbrlink(默认 false)
force: false # 强制模式:忽略缓存,为已有 abbrlink 的文章重新计算(默认 false)
writeback: true # 是否把生成的 abbrlink 回写进 .md 文件的 front-matter(默认 true)

效果示例:

1
2
3
4
crc16 & hex → https://your.site/posts/66c8.html
crc16 & dec → https://your.site/posts/65535.html
crc32 & hex → https://your.site/posts/8ddf18fb.html
crc32 & dec → https://your.site/posts/1690090958.html

hexo-blog-encrypt

官方仓库:hexo-blog-encrypt

功能介绍:给文章加密,让文章只允许指定人员访问

安装:

1
npm install --save hexo-blog-encrypt

配置示例:
_config.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Security
encrypt: # hexo-blog-encrypt
abstract: 有东西被加密了, 请输入密码查看. # 加密摘要文案
message: 您好, 这里需要密码. # 密码输入框提示
tags: # 按标签加密(可选)
- {name: tagName, password: 密码A}
- {name: tagName, password: 密码B}
wrong_pass_message: 抱歉, 这个密码看着不太对, 请再试试. # 密码错误提示
wrong_hash_message: 抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容. # v4 起已废弃,等同于 wrong_pass_message

# ── v4 新增配置(全部可选,均有安全默认值)──────────────
decryptButton: # 在密码框旁显示"解密"按钮
show: true # 默认 true;主题模板已自带 <%- decrypt_button %> 时忽略本项
text: 解密
autoSave: false # 是否缓存派生密钥到 localStorage 免重复输入(默认 false)
stableSalt: false # 是否让 PBKDF2 salt 在 clean build 间保持稳定(默认 false,
# 配合 autoSave 用于 Cloudflare Pages / Vercel / Netlify /
# GitHub Actions 等每次从干净环境重新构建的部署平台)
kdf:
iterations: 250000 # PBKDF2 迭代次数,下限 100000,推荐 ≥ 600000(OWASP 2023)
theme: default # 加密主题:default / xray
silent: false # 禁止插件输出 INFO 日志(默认 false)

# 文章级别优先级:文章 front-matter > _config.yml > 默认值

文章 front-matter 用法

1
2
3
4
5
6
7
8
9
10
11
12
---
title: Hello World
date: 2016-03-30 21:18:02
password: hello # 必填:文章密码
abstract: 有东西被加密了, 请输入密码查看. # 可选:覆盖全局摘要
message: 您好, 这里需要密码. # 可选:覆盖全局提示
wrong_pass_message: 抱歉, 这个密码看着不太对, 请再试试. # 可选
theme: xray # 可选:单篇指定加密主题
autoSave: true # 可选:单篇开启密钥缓存
---

文章正文……

特殊用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 对已打 Tag 加密的文章,单独取消加密:
---
title: Callback Test
tags:
- A Tag should be encrypted
password: "" # 空字符串 = 取消该篇的 Tag 加密
---

# 解密后触发事件监听(4.0.3 起 detail.mode 为 manual / cached):
<script>
window.addEventListener('hexo-blog-decrypt', function (event) {
// 解密完成后的回调,可在此重新初始化目录、代码高亮等
console.log('Decrypted:', event.detail.mode);
});
</script>

⚠️ 注意:

  • v4 使用 AES-256-GCM(PBKDF2-SHA256 派生密钥),密文格式与 v3 不互通,升级需 hexo clean && hexo generate
  • 生产环境必须 HTTPS(Web Crypto API 要求安全上下文,非 localhost 的纯 HTTP 下解密会静默失败);
  • 4.0.3 起,普通外部脚本按文章内顺序加载完成后才执行后续内联脚本(每个脚本最长等待 15 秒),解决了 DPlayer 等组件在依赖库未就绪时就初始化的问题;
  • 加密文章的 post.origin 明文、搜索/feed 的明文字段都不应输出,TOC 需在解密回调中基于 #hexo-blog-encrypt 生成,避免标题泄露。

插件主题预览:Demo Page 所有的密码都是hello(当前支持主题:default、xray)


hexo-safego

官方仓库:hexo-safego

功能介绍:外链安全跳转,在要跳转外部链接时,进行提示说明

安装(需先安装 cheerio):

1
2
npm install cheerio --save
npm install hexo-safego --save

配置示例:
_config.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# hexo-safego 安全跳转插件
# see https://blog.liushen.fun/posts/1dfd1f41/
hexo_safego:
# 基本功能设置
general:
enable: true # 启用插件(默认 false,注意要打开!)
enable_base64_encode: true # 跳转链接 Base64 编码(默认 true)
enable_target_blank: true # 新窗口打开跳转页(默认 true)

# 安全设置
security:
url_param_name: 'u' # URL 参数名(默认 'u')
html_file_name: 'go.html' # 跳转页面文件名(默认 'go.html')
ignore_attrs: # 忽略处理的 HTML 属性(默认 ['data-fancybox'])
- 'data-fancybox'

# 容器与页面设置
scope:
apply_containers: # 生效容器选择器(默认 ['body'];主题示例 #article-container)
- '#article-container'
apply_pages: # 生效页面路径(默认 ['/'] 全站)
- "/posts/"
- "/devices/"
exclude_pages: # 排除的页面路径(默认 [])
# - "/about/"

# 域名白名单(必改!填你自己的站点域名)
whitelist:
domain_whitelist: # 字符串匹配,包含即跳过处理(默认 ['example.com'])
- "your-site.com" # ← 改成你的域名!

# 跳转页外观
appearance:
avatar: /info/avatar.ico # 头像路径(默认 jsdelivr 远程图,建议本地化)
title: "网站名称" # 跳转页标题(默认 网站名称)
subtitle: "网站副标题" # 跳转页副标题(默认 网站副标题)
darkmode: auto # 深色模式:true / false / auto(默认 false)
countdowntime: 4 # 倒计时秒数;负数 = 不自动跳转(默认 4)
custom_css: /css/go.css # 自定义 CSS(相对路径或完整 URL,留空不插入)
leave_text: "您即将离开本站,跳转到:" # 主提示文案
countdown_text: "⚡将在{seconds}秒后跳转,请自行确认链接安全性" # 倒计时文案,{seconds} 为占位符
manual_confirm_text: "💡请自行确认链接安全后再继续跳转" # countdowntime<0 时显示

# 调试
debug:
enable: false # 调试模式,输出详细信息(默认 false)

单页关闭(front-matter)

1
2
3
---
safego: false
---

特别注意:

  • domain_whitelist:必须填入你的站点域名,否则站内链接也会被处理成跳转页。
  • apply_containers:默认 body(全站生效);按主题调整,如 Butterfly 主题可填 #article-container。想匹配整站可填 body 或删除该项。
  • apply_pages:默认 ['/'](全站);只希望文章页生效,可设为 '/posts/''/post/'
  • avatartitlesubtitle:建议改成自己的信息;默认头像走 jsdelivr,国内加载较慢,可换本地图片。

hexo-yam

官方仓库:hexo-yam

功能介绍:静态资源压缩一条龙:HTML/JS/CSS/SVG/XML/JSON 压缩 + gzip/brotli/zstd 预压缩

安装:

1
npm install --save hexo-yam

配置示例:
_config.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
minify:
enable: true # 启用插件(默认 true)
previewServer: true # hexo server 预览时禁用(默认 true,本地调试不压缩)

# ── HTML ──────────────────────────────────────────
html:
enable: true # 默认 true
priority: 10 # 插件优先级(默认 10)
verbose: false # 详细输出(默认 false)
exclude: # 排除文件,支持通配符
# - "*.min.html"
globOptions: # glob 匹配选项(详见 micromatch)

# ── CSS ───────────────────────────────────────────
css:
enable: true # 默认 true
priority: 10
verbose: false
exclude:
- "*.min.css" # 跳过已压缩文件
level: 2 # 优化级别 1-2(默认 2,clean-css 参数)

# ── JS ────────────────────────────────────────────
js:
enable: true # 默认 true
priority: 10
verbose: false
exclude:
- "*.min.js"
compress: # Terser compress 选项(默认开启)
mangle: true # 变量名混淆(默认 true;可传对象细化 mangle 选项)
output: # Terser output 选项
# comments: true # 保留注释

# ── SVG ───────────────────────────────────────────
svg:
enable: true # 默认 true
priority: 10
verbose: false
include: # 默认排除 *.min.svg
- "*.svg"
- "!*.min.svg"
plugins: # svgo 插件选项
# removeComments: false # 保留注释
# cleanupIds: false # 保留未使用的 ID

# ── XML(默认关闭)───────────────────────────────
xml:
enable: false # 默认 false
priority: 10
verbose: false
include:
- "*.xml"
- "!*.min.xml"
removeComments: true # 移除 XML 注释(默认 true)

# ── JSON(默认关闭)──────────────────────────────
json:
enable: false # 默认 false
priority: 10
verbose: false
include:
- "*.json"
- "!*.min.json"

# ── Gzip ──────────────────────────────────────────
gzip:
enable: true # 默认 true
priority: 10
verbose: false
include: # 支持通配符,必须带 * 和单引号
- "*.html"
- "*.css"
- "*.js"
- "*.txt"
- "*.ttf"
- "*.atom"
- "*.stl"
- "*.xml"
- "*.svg"
- "*.eot"
- "*.json"
level: 9 # 压缩级别 1-9(默认 9)

# ── Brotli ────────────────────────────────────────
brotli:
enable: true # 默认 true
priority: 10
verbose: false
include:
- "*.html"
- "*.css"
- "*.js"
- "*.txt"
- "*.ttf"
- "*.atom"
- "*.stl"
- "*.xml"
- "*.svg"
- "*.eot"
- "*.json"
level: 11 # 压缩级别 1-11(默认 11)

# ── Zstd ⚠️ 依赖 @mongodb-js/zstd(v1.x 已弃用)───
zstd:
enable: true # 默认 true
priority: 10
verbose: false
include:
- "*.html"
- "*.css"
- "*.js"
- "*.txt"
- "*.ttf"
- "*.atom"
- "*.stl"
- "*.xml"
- "*.svg"
- "*.eot"
- "*.json"
level: 3 # 压缩级别 1-22(默认 3)

glob 匹配注意

1
2
3
4
5
exclude:
- "*foo.html" # basename 匹配默认开启
- "**/bar/*/*.html" # 含斜杠的路径,basename 自动关闭
globOptions:
basename: true # 默认开启

说明:hexo-yam 是「全能型」压缩插件,一个插件就能完成 HTML/JS/CSS/SVG/XML/JSON 压缩与 gzip/brotli/zstd 预压缩,但我使用时在vercel时构建时间会增加30s左右(vercel免费账号默认配置)。下面三款(hexo-html-minifier / hexo-clean-css / hexo-uglify)是各自独立的轻量压缩插件,也能实现HTML/JS/CSS,且速度比hexo-yam快。你任选其一即可


hexo-html-minifier

官方仓库:hexo-html-minifier

功能介绍:基于 HTMLMinifier 压缩 HTML 输出

安装:

1
npm install hexo-html-minifier --save

配置示例:
_config.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ===== HTML 压缩(hexo-html-minifier) =====
html_minifier:
exclude: # 排除文件(glob)
# 以下全部为默认值,留空即生效
collapseBooleanAttributes: true
collapseWhitespace: true
removeComments: true
removeEmptyAttributes: true
removeScriptTypeAttributes: true
removeStyleLinkTypeAttributes: true
minifyJS: true
minifyCSS: true
ignoreCustomComments: # 保留特定注释(已默认保留 <!-- more -->)
- !!js/regexp /^\s*more/

ignoreCustomComments 需用 !!js/regexp 前缀声明正则。其余可选字段见 HTMLMinifier 选项表

hexo-clean-css

官方仓库:hexo-clean-css

功能介绍:基于 clean-css 压缩 CSS 输出

安装:

1
npm install hexo-clean-css --save

配置示例:
_config.yml

1
2
3
4
# ===== CSS 压缩(hexo-clean-css) =====
clean_css:
exclude:
- '*.min.css' # 默认排除已压缩的 CSS

hexo-uglify

官方仓库:hexo-uglify

功能介绍:基于 Terser 压缩 JavaScript 输出

安装:

1
npm install hexo-uglify --save

配置示例:
_config.yml

1
2
3
4
5
6
7
# ===== JS 压缩(hexo-uglify) =====
uglify:
exclude:
- '*.min.js' # 默认排除已压缩的 JS
mangle: true # 混淆变量名
# output: # Terser output 选项
# compress: # Terser compress 选项

outputcompress 的具体字段见 Terser minify options

写在最后

以上插件和配置都和我博客实际使用的几乎一致,并且额外尽可能详细地给出了可能用到的配置。希望对你有所帮助。

 

鸣心/Write

Hexo博客:一些非常有用的插件
https://b.wihi.top/posts/1620da98.html
作者
鸣心
发布于
2026年7月31日
更新于
2026年9月12日
许可协议