Hexo Diversity 主题的个人博客留言评论功能是如何巧妙嵌入的?
- 内容介绍
- 文章标签
- 相关推荐
哎呀,今天又想跟大家聊聊那个 Hexo Diversity 主题的留言评论功能到底是怎么搞出来的。先别急着把它当成一篇干巴巴的技术教程, 咱们先放松一下感受一下那种在写博客时突然被“留言框”给逗得眼睛发亮的感觉。
一、为何要把评论塞进静态博客?
你可能会问:“静态博客怎么能有评论啊?不就是把 Markdown 转成 HTML 的吧?”这就像问“烤箱怎么能做出冰淇淋?”答案是:主要原因是现在的前端技术太牛逼了 GitHub 的 Issue、Discussions 能做数据存储;而我们只需要把一个小小的 JavaScript 注入页面就能让访客用 GitHub 账号来发声。Diversity 就是这么一款让所有人都能轻松挂上评论模块的神器,心情复杂。。

1)多说?LiveRe?Giscus?Gitalk?
这些名字听起来像是某些酒吧里的酒名, 但其实它们各自都是不同风格的评论系统:,纯正。
| 系统 | 存储方式 | 登录方式 | 优点 |
|---|---|---|---|
| LiveRe | 服务器数据库 | Email/社交账号 | 实时弹幕式体验 |
| Gitalk | GitHub Issue | GitHub OAuth | 代码级可追溯性好 |
| Docusaurus Comment | NoSQL云服务 | Email/密码注册 | 数据平安可控 |
| Giscus | GitHub DiscussionsSAML SSO/社交账号混合登陆 B+高互动率 | ||
| 噪音行:别看表格整齐,其实我也没去检查过这些细节。 | |||
二、Diversity 主题如何实现多系统切换?
绝绝子! Diversity 本身并不是一个“单体”的插件,而是一套模块化架构。你在 _config.yml 文件里写下:
comments:
style: tabs
active: 1
storage: true
lazyload: false
gitalk:
enable: true
giscus:
enable: false
utterances:
enable: false
live_re:
enable: true
live_re_uid: "12345678"
live_re_siteid: "abcd"
live_re_cdn_id: "cdn123"
live_re_version: "v1"
live_re_config:
color_primary:"#ff0000"
color_secondary:"#00ff00"
...
me_comments_tabs_style:"tab-borderless"
me_comments_tab_item_color:"#333333"
me_comments_tab_item_bgcolor:"#ffffff"
...
这段配置看起来像一份简历, 但其实它决定了:开启哪一种评论系统,隐藏哪一种,以及整个页面是否使用 “标签页” 来展示多个评论入口,卷不动了。。
噪音碎片:如果你发现某个字段名字错别字, 那就别管了它们往往是复制粘贴后忘记改动导致的 bug。
Diversity 的核心在于两个 JS 注入点:me_inject 和 diversity_inject。自动生成对应容器。
三、从配置到渲染——实际流程
- 读 _config.yml → 找到 comments 栏目 → 判断 enabled 标志。
- 比方说 gitalk.repo、giscus.repo_id 等。
- 通过 me_inject 把对应的 container 注入到页面底部;如果开启 tab 模式,则再加一个 tab 切换容器。
- 接着加载外部 JS SDK,并初始化实例;如果有错误会打印到 console。
- 浏览器渲染完成后 用户就可以看到“留言”框了;若开启 lazyload,会等到滚动到底部才真正加载脚本。
- *提示*:Diversity 支持自定义 CSS, 让你可以随意改颜色、字体、边框。比如把 tab 背景改成渐变,然后再加一点闪光特效:
- 再说说一步, 就是部署:
$ hexo clean && hexo generate && hexo deploy -d localhost;
- Mmm… 有时候部署成功但浏览器还是显示旧版本,这是缓存问题吗?算了 我就直接清空缓存再访问一次吧~ 😅
- Keeleeeeeeee… 我发现 LiveRe 有时会返回 “502 Bad Gateway”,那肯定是 CDN 问题,不是我的代码。”
- *我还在想, 这是不是主要原因是我没给 CDN 设置正确域名呢…*
- GitHub OAuth 配置不对,总会报 “Invalid client secret”。解决办法:确认 client_id 与 client_secret 对应的是同一个 OAuth App,并且已授权访问 Issues 权限。
- 在启用 LiveRe 时如果 UID 写错,会导致页面根本没有弹幕效果;而且 LiveRe 的 JS 脚本有时会被 CSP 拦截,你可能需要在 header 加上 allowlist 或者使用 `
四、经验分享与坑点汇总:
哎呀,今天又想跟大家聊聊那个 Hexo Diversity 主题的留言评论功能到底是怎么搞出来的。先别急着把它当成一篇干巴巴的技术教程, 咱们先放松一下感受一下那种在写博客时突然被“留言框”给逗得眼睛发亮的感觉。
一、为何要把评论塞进静态博客?
你可能会问:“静态博客怎么能有评论啊?不就是把 Markdown 转成 HTML 的吧?”这就像问“烤箱怎么能做出冰淇淋?”答案是:主要原因是现在的前端技术太牛逼了 GitHub 的 Issue、Discussions 能做数据存储;而我们只需要把一个小小的 JavaScript 注入页面就能让访客用 GitHub 账号来发声。Diversity 就是这么一款让所有人都能轻松挂上评论模块的神器,心情复杂。。

1)多说?LiveRe?Giscus?Gitalk?
这些名字听起来像是某些酒吧里的酒名, 但其实它们各自都是不同风格的评论系统:,纯正。
| 系统 | 存储方式 | 登录方式 | 优点 |
|---|---|---|---|
| LiveRe | 服务器数据库 | Email/社交账号 | 实时弹幕式体验 |
| Gitalk | GitHub Issue | GitHub OAuth | 代码级可追溯性好 |
| Docusaurus Comment | NoSQL云服务 | Email/密码注册 | 数据平安可控 |
| Giscus | GitHub DiscussionsSAML SSO/社交账号混合登陆 B+高互动率 | ||
| 噪音行:别看表格整齐,其实我也没去检查过这些细节。 | |||
二、Diversity 主题如何实现多系统切换?
绝绝子! Diversity 本身并不是一个“单体”的插件,而是一套模块化架构。你在 _config.yml 文件里写下:
comments:
style: tabs
active: 1
storage: true
lazyload: false
gitalk:
enable: true
giscus:
enable: false
utterances:
enable: false
live_re:
enable: true
live_re_uid: "12345678"
live_re_siteid: "abcd"
live_re_cdn_id: "cdn123"
live_re_version: "v1"
live_re_config:
color_primary:"#ff0000"
color_secondary:"#00ff00"
...
me_comments_tabs_style:"tab-borderless"
me_comments_tab_item_color:"#333333"
me_comments_tab_item_bgcolor:"#ffffff"
...
这段配置看起来像一份简历, 但其实它决定了:开启哪一种评论系统,隐藏哪一种,以及整个页面是否使用 “标签页” 来展示多个评论入口,卷不动了。。
噪音碎片:如果你发现某个字段名字错别字, 那就别管了它们往往是复制粘贴后忘记改动导致的 bug。
Diversity 的核心在于两个 JS 注入点:me_inject 和 diversity_inject。自动生成对应容器。
三、从配置到渲染——实际流程
- 读 _config.yml → 找到 comments 栏目 → 判断 enabled 标志。
- 比方说 gitalk.repo、giscus.repo_id 等。
- 通过 me_inject 把对应的 container 注入到页面底部;如果开启 tab 模式,则再加一个 tab 切换容器。
- 接着加载外部 JS SDK,并初始化实例;如果有错误会打印到 console。
- 浏览器渲染完成后 用户就可以看到“留言”框了;若开启 lazyload,会等到滚动到底部才真正加载脚本。
- *提示*:Diversity 支持自定义 CSS, 让你可以随意改颜色、字体、边框。比如把 tab 背景改成渐变,然后再加一点闪光特效:
- 再说说一步, 就是部署:
$ hexo clean && hexo generate && hexo deploy -d localhost;
- Mmm… 有时候部署成功但浏览器还是显示旧版本,这是缓存问题吗?算了 我就直接清空缓存再访问一次吧~ 😅
- Keeleeeeeeee… 我发现 LiveRe 有时会返回 “502 Bad Gateway”,那肯定是 CDN 问题,不是我的代码。”
- *我还在想, 这是不是主要原因是我没给 CDN 设置正确域名呢…*
- GitHub OAuth 配置不对,总会报 “Invalid client secret”。解决办法:确认 client_id 与 client_secret 对应的是同一个 OAuth App,并且已授权访问 Issues 权限。
- 在启用 LiveRe 时如果 UID 写错,会导致页面根本没有弹幕效果;而且 LiveRe 的 JS 脚本有时会被 CSP 拦截,你可能需要在 header 加上 allowlist 或者使用 `

