本文档介绍 jijian 主题的高级功能,包含路径级密码保护、Vercel 部署、GitHub Actions 自动化等进阶内容。
文章内容级本地加密
jijian 主题支持高度安全且跨平台的文章加密功能。与传统的后端验证不同,它在构建阶段对文章正文进行 AES 加密,解密过程完全在访客的浏览器本地完成。
功能特点
- 强力加密:使用 AES-256-GCM 算法,正文在服务器上以密文形式存储。
- 跨平台通用:不依赖 Vercel 或 EdgeOne 的特定功能,任何静态托管平台均可运行。
- 零依赖解密:使用浏览器原生 WebCrypto API,不加载任何外部 JS 库。
- SEO 友好:加密文章会自动被 Pagefind 搜索索引忽略,保护隐私。
- 优雅交互:内置极致美观的毛玻璃(Glassmorphism)解锁界面。
配置步骤
1. 为文章设置密码
在文章的 Front Matter(头部信息)中添加 mima 或 password 字段:
|
|
2. 全局参数配置 (hugo.yaml)
在 hugo.yaml 中,您可以统一定义加密页面的行为:
|
|
3. 在构建流程中启用加密
静态本地加密 (Static Local Encryption)
jijian 主题内置了一套基于 Node.js 的本地文章加密系统。它在博客构建(Build)阶段执行,将指定的 Markdown 文章内容加密为 AES-256-GCM 格式,并生成美观的、带毛玻璃效果的解密界面。
1. 快速开始
您只需要在文章的 Front Matter 中添加 mima(密码)字段即可:
|
|
2. 构建与加密
要使加密生效,您必须运行包含加密脚本的构建命令。推荐在 package.json 中配置如下脚本:
|
|
执行 npm run build 后,脚本会自动搜索含有 mima 标签的文章并进行处理。
3. 本地预览加密效果
由于加密指令是写在编译命令中的,直接运行 hugo server 可能无法看到完整的解密 UI(它仅能识别逻辑,但不执行加密脚本)。
推荐的本地测试步骤:
- 执行构建:在终端运行
npm run build。 - 启动静态服务:使用任何静态服务器查看
public目录,例如:1npx serve public - 访问页面:通过本地服务器地址访问该文章,由于是编译后的结果,您将看到完整的密码输入界面。
主题配置工具 (Config Tools)
为了降低配置负担,主题在根目录提供了一个可视化的配置管理页面:极简(jijian)配置工具-config-tools.html。
核心功能:
- 部署一键通:
- EdgeOne 支持:勾选“部署在腾讯 EdgeOne Pages”后,可指定 Hugo 版本号并直接导出标准的
edgeone.json。 - 自动依赖生成:自动生成包含加密和搜索指令的
package.json。
- EdgeOne 支持:勾选“部署在腾讯 EdgeOne Pages”后,可指定 Hugo 版本号并直接导出标准的
- 可视化 YAML 管理:以类 App 的界面管理
hugo.yaml中的菜单、社交图标、页脚信息等,无需直接编辑复杂的 YAML 语法。 - 配置快照 (Snapshot):
- 如果您担心配置丢失,可以将当前所有设置导出为
.ssjson快照文件。 - 下次使用时,只需将该快照文件拖入工具,即可瞬间恢复所有配置并进行再次修改。
- 如果您担心配置丢失,可以将当前所有设置导出为
路径纠正功能
在配置工具中管理文章路径时,点击输入框旁的 “纠正” 按钮,工具会自动处理以下逻辑:
- 去除 Windows 式的
\反斜杠。 - 自动识别并去除文章的
.md后缀。 - 确保 URL 以
/开头和结尾。 - 强制转换为小写,以适配 Hugo 的默认路由行为。
Vercel 部署
Vercel 是部署 Hugo 博客的推荐平台,提供极速的构建流水线和全球分发能力。
为什么选择 Vercel?
- 极速构建:自动识别 Hugo 环境,构建速度极快
- 自动 HTTPS:免费 SSL 证书
- 全球 CDN:通过其边缘网络快速访问
- 自动部署:推送代码后自动触发生产环境构建
- 预览环境:每个 PR 都有独立的预览链接
部署前准备
项目结构
your-site/
├── hugo.yaml # Hugo 配置文件
├── package.json # Node.js 依赖
├── content/ # 文章内容
├── static/ # 静态资源
└── themes/
└── jijian/ # 主题文件
package.json
|
|
Vercel 导入配置
1. 导入仓库
在 Vercel 中导入 GitHub 仓库。
2. 配置项目
| 配置项 | 值 |
|---|---|
| Framework Preset | Hugo |
| Root Directory | ./ |
| Build Command | npm run build |
| Output Directory | public |
注:推荐在 package.json 中配置好完整的构建脚本,包含 Hugo 生成、加密脚本运行及 Pagefind 索引生成。
3. 环境变量
| Key | Value | 说明 |
|---|---|---|
HUGO_VERSION |
0.158.0 |
Hugo 版本,建议与本地一致 |
HUGO_BASEURL |
https://your-domain.com/ |
站点 URL |
构建命令说明
|
|
命令分解:
hugo:构建站点--gc:清理未使用的资源--minify:压缩输出&& node .../encrypt.js:扫描并加密文章(核心步骤)&& npx pagefind:生成搜索索引
自定义域名
1. 添加域名
在 Vercel 项目设置中添加自定义域名。
2. 配置 DNS
根据 Vercel 提示,在域名服务商处配置 DNS 记录。
GitHub Actions 自动化
使用 GitHub Actions 实现自动化部署。注意在工作流中加入 Node.js 环境以运行加密脚本。
基本工作流示例
创建 .github/workflows/gh-pages.yml:
|
|
Cloudflare Pages 部署
Cloudflare Pages 也支持 Hugo 部署。
配置步骤
1. 导入仓库
在 Cloudflare Pages 中导入 GitHub 仓库。
2. 构建配置
| 配置项 | 值 |
|---|---|
| Framework preset | Hugo |
| Build command | hugo --gc --minify && node themes/jijian/assets/js/encrypt.js && npx pagefind --site public --output-path public/pagefind |
| Build output directory | public |
3. 环境变量
| Variable | Value |
|---|---|
HUGO_VERSION |
0.158.0 |
注意事项
- 全平台支持:得益于本地静态加密技术,jijian 主题的加密功能在 Cloudflare Pages 上运行良好。
- 构建环境:确保在 Cloudflare 控制台选择 Hugo 模板。
本地开发优化
使用 Hugo Modules
推荐使用 Hugo Modules 管理主题:
|
|
优点:
- 无需手动下载主题
- 方便更新主题
预览草稿
|
|
预览未来日期文章
|
|
性能优化
图片优化
- 使用 WebP 格式:Hugo Extended 会自动转换
- 配置响应式图片:
|
|
当你在文章中插入一张 4000 像素的高清大图时,如果不开启此功能,手机用户也必须下载完整的大图,非常耗流量且加载慢。 开启后,Hugo 会在构建时自动为这张图生成 360px、480px、720px 等多个尺寸的缩略图。
注意:这要求图片存放在“文章资源包(Page Bundles)”中(即图片和文章.md文件在同一个文件夹下),或者是博客根目录下的 assets 目录下(没有可以自己新建这个文件夹)的资源。
- 图片压缩:使用工具压缩图片后再上传
资源指纹
|
|
指纹(Fingerprinting)是指在 CSS 和 JS 文件的文件名后面加一串随机的哈希字符。 例如:style.css 变成 style.abcd123.css。
比如你修改了博客的颜色,重新部署:
- 没有指纹:读者的浏览器可能缓存了旧的 style.css,导致他看到的还是旧颜色,甚至排版错乱(除非他手动刷新)。
- 有指纹:因为文件内容变了,生成的文件名变成了 style.wxyz456.css。浏览器发现文件名变了,会强制下载最新版。
安全性 (SRI):开启指纹后,HTML 会包含一个 integrity 校验码。如果你的 CDN 节点被黑客篡改了文件,浏览器会自动拦截,防止恶意代码运行。
构建优化
|
|
懒加载
主题已内置图片懒加载,无需额外配置。
监控与分析
Google Analytics
在 hugo.yaml 中配置:
|
|
故障排查
构建失败
- 检查 Hugo 版本:确保版本 ≥ 0.146.0
- 检查配置语法:YAML 格式是否正确
- 检查文章格式:Front Matter 是否正确
搜索不工作
- 检查索引生成:确认 Pagefind 索引已生成
- 检查路径配置:确保
--output-path与页面引用一致 - 清除缓存:删除
public和static/pagefind后重新构建
样式异常
- 清除缓存:删除
resources目录后重新构建 - 检查配置:确认
noClasses: false已设置 - 检查文件路径:CSS 文件是否正确加载
评论不显示
- 检查仓库设置:确保 Discussions 已启用
- 检查 giscus app:确认已安装并授权
- 检查配置参数:确保所有参数正确
加载评论中...
哎呀!Giscus评论模块加载失败啦~
Giscus是基于Github Discussions的,或许当前网络无法访问Github哦!