自部署 GitHub 风格的 Reactions 点赞功能

自部署 GitHub 风格的 Reactions 点赞功能

💡 原文中文,约2200字,阅读约需6分钟。
📝

内容提要

本文介绍如何自部署 GitHub 风格 Reactions 点赞功能。后端可选 Cloudflare D1:创建数据库,克隆 emaction.backend,修改 wrangler.toml 中的 database_id,登录 Wrangler 后执行 SQL 建 reactions 表,再部署到 Worker。前端引入 bundle.js,使用 emoji-reaction 标签并传入自定义 endpoint,多个点赞区可通过 target_id 区分。

🔎

延伸解读

后端自部署的关键步骤

文章详细说明了自部署后端的流程:在 Cloudflare 创建 D1 数据库并获取 database_id,克隆 emaction.backend 后修改 wrangler.toml 中的 database_id,通过 wrangler login 授权,再执行 SQL 创建 reactions 表,最后 wrangler deploy 部署到 Worker。其中建表 SQL 是作者从源代码逆向得出的,因为项目未提供初始化脚本。

前端集成的注意事项

前端需引入 bundle.js,并使用 emoji-reaction 标签,通过 endpoint 属性指定自部署的 Worker 地址。文章特别提醒 endpoint 末尾不要加斜杠,否则可能出错。同一页面有多个点赞区时,应使用 target_id 区分,避免数据混淆。JS 文件也可下载后自行修改和部署。

国内访问与自定义域名

部署后 Worker 会获得一个 workers.dev 域名,但文章指出如果用户大多数为国内,可能需要绑定自定义域名才能友好访问。这意味着默认域名可能存在访问限制或速度问题,自部署时需考虑目标用户群体并提前规划域名配置。

❓

Q&A

如何自部署 GitHub 风格的 Reactions 点赞功能的后端?

首先在 Cloudflare 创建名为 emaction 的 D1 数据库,复制其 id。然后克隆 emaction.backend 代码,安装依赖并全局安装 Wrangler。修改 wrangler.toml 中的 database_id 为自己的。登录 Wrangler 后,执行 SQL 命令创建 reactions 表。最后运行 wrangler deploy 部署到 Cloudflare Worker,获得 Worker 域名。

部署后端是必须的吗?可以只用官方 API 吗?

部署后端不是必需的,可以直接使用官方提供的 API。但前提是需要有 Cloudflare 账号和 Node.js 环境才能进行自部署。

前端如何引入并使用这个 Reactions 点赞功能?

在 HTML 中引入 JS Module:<script type="module" src="https://cdn.jsdelivr.net/gh/emaction/frontend.dist@1.0.7/bundle.js"></script>,然后使用 <emoji-reaction endpoint="你的Worker域名"></emoji-reaction> 标签。注意 endpoint 末尾不要加斜杠。

同一页面有多个点赞区时,如何区分不同的 Reactions?

可以通过设置 target_id 属性来区分。在 emoji-reaction 标签中传入自定义的 target_id,例如 <emoji-reaction endpoint="..." target_id="HugoBlogReactions"></emoji-reaction>,这样同一页面内的多个点赞区就能独立统计。

创建 reactions 表的 SQL 命令是什么?

使用 wrangler d1 execute emaction --command='CREATE TABLE reactions (id INTEGER PRIMARY KEY AUTOINCREMENT, target_id TEXT NOT NULL, reaction_name TEXT NOT NULL, count INTEGER NOT NULL DEFAULT 0, created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL)' 命令来创建 reactions 表。

为什么选择这个 Reactions 点赞功能?

因为它模仿了 GitHub 的点赞功能,基本上 1:1 还原了 GitHub 的 Reactions 体验,符合“GitHub 即正义”的理念。

🏷️

标签

➡️

继续阅读