1. 1. 什么是 ESHexoN?
  2. 2. 如何使用 ESHexoN?
  3. 3. ESHexoN 代码 & 原理
    1. 3.1. 代码目录
    2. 3.2. 后端的主要文件
      1. 3.2.1. src/res.js
      2. 3.2.2. src/check_token.js
      3. 3.2.3. src/env.js
      4. 3.2.4. 是不是目录?文件遍历
      5. 3.2.5. 写文件
    3. 3.3. 那前端呢?
      1. 3.3.1. 一些小细节
  4. 4. 在未来

什么是 ESHexoN?

ESHexoN 是一款简洁、强大的 Hexo 在线编辑器。

其灵感来自于 HexoPlusPlus/HexoPlusPlus (基于 Cloudflare Workers 的无服务器 Hexo 后端)

但是,遗憾的是 HPP 突然停止维护,只留下一个 Wexagonal

However, 这更新速度也太慢了啊喂~

Qexo 也是一个很不错的项目,但是它基于 Python + MongoDB,不属于我擅长的技术栈,有点劝退。

于是,ESHexoN 诞生了。它致力于使用 JavaScript Edge Function 构建 Hexo「后端」,实现普通静态博客所不具备的功能,解决大部分静态博客的痛点。

如何使用 ESHexoN?

ESHexoN 的使用说明可以参见文档 --> 文档链接

ESHexoN 代码 & 原理

代码目录

dist 目录存放构建的文件,src 目录为源码,tools 是一些工具,index.js 则为入口文件。

后端的主要文件

src/res.js

res.js 主要负责 HTTP 响应输出,统一输出格式。

故 ESHexoN API 主要返回格式为:

{
"statusCode": "...",
"statusInfo": "..."
}

[Source Code]

src/check_token.js

check_token.js 主要负责 API 请求的鉴权,所有的鉴权 API 都需要携带 token 发送。

生成代码:

var token = md5(userdata[0].username + userdata[0].password + `${new Date(Date.now()).getFullYear()}${new Date(Date.now()).getMonth()+1}`);

故 ESHexoN Token 格式为:

md5(USERNAME+PASSWORD+YEAR+MONTH);

过期时间为一个月。

src/env.js

ESHexoN 除了依靠 yfun-lab/gh-worker-kv 存储主要数据库文件外,还使用环境变量存储基本的 Token、仓库等。

ESHexoN 自设计之初就预备支持 Cloudflare Workers, Deno 等平台。

事实上,这两个平台获取环境变量的方式根本不一样。为了在一个代码下同时支持两个平台,env.js 简单的写了个判断。

是不是目录?文件遍历

GitHub API 会返回当前目录下的文件和文件夹,但有人的 source/_posts 目录下还有文件夹。根据观察发现,文件夹的 typedir,而普通文件为 file,那么只需要一个简单的判断,就可以返回单个目录下所有文件。

写文件

在写文件之前,我们需要先获取该文件的 sha 值。

这是因为 GitHub 规定修改文件必须在 body 中携带源文件 sha.

同时,文件还必须接受 Base64 编码。这个问题很好解决,ESHexoN 的仓库依赖中已经包含。当然,我更倾向于在前端编码文本,在后端直接 PUT。

那前端呢?

以上是后端的主要代码。因为 ESHexoN 是前后端分离项目,并且开放跨域,所以我们构建了一个官方前端。只需要输入你的用户名、密码和后端地址就可以开始使用。

前端的代码也是开源的,基于 Vue + Vuetify 构建,在 GitHub 上查看它

一些小细节

早在 HexoPlusPlus dev 阶段的时候,ChenYFan 就在群内讨论如何解决 Markdown 编辑器的问题。在当时,EditorMD 的兼容性很差。于是,HPP 上采取的解决方案是:textarea + marked.js

然后,HPP 编辑器就是这样的:

这并不是一个很好的主意。

于是在 ESHexoN 上,我们为 Hexo 特性定制了一款简单的编辑器。

首先,它是由 https://yfun.top/lab/markdown/ 修改而来的,在部分特性上与其类似。

但是受限于页面尺寸和小屏幕优化,ESHexoN 的编辑器在大屏上是这样显示的:

双栏布局,实时预览。

为了保证在小屏幕的体验,在小屏幕上将自动收起预览,改为全屏模式。

如果需要预览,可以点击「预览」按键。

同时 ESHexoN 的编辑器有自动保存功能,即使写到一半刷新页面或是浏览器崩溃也不用怕,页面内容已经存储到 localStorage 内了。(我也不知道会不会撑炸

一些基本的搜索功能都得以保留(与 HPP 是十分甚至九分的类似

不仅仅局限于文章,配置文件、代码都可以修改:

在未来

目前 ESHexoN 还处于 Beta 阶段,部分功能还没有开发完成。

关于说说、评论等也都在等待开发(最近可能不会有)

如果在使用中出现了任何的问题,欢迎提 Issue 反馈。