如何用 hexo 简单建立个人博客
用 hexo 搭建个人博客
前言
此教程面向有一定前端基础的读者。ejs 不会也没关系,它很简单,可以现学。
准备阶段
首先,如果可以的话,先读一遍 Hexo 官方文档。学任何框架,第一件事永远是读文档,读不懂的地方再问 AI。需要着重了解的内容如下:
- 只想直接用别人的主题,了解这些就够:
- 开始使用
- 基本操作
- 想深入了解主题、自己写东西,在上面基础上还需要了解:
- 自定义(该内容都需要看,下面标出的相对重要)
- 变量
- 模板
- 自定义(该内容都需要看,下面标出的相对重要)

有了上述了解就可以开始用框架了。如果不研究插件、不改源码,API 相关的内容可以不看。
hexo 框架主要使用模式
hexo 主要的使用方式,就是配合官方暴露的全局 js 变量和 ejs 模板插入语言,对 html 内容做动态修改。其中大部分内容仍然是前端。模板里写的主要是「当前所有 md 文档怎么分类、怎么排序」的逻辑,访问不同页面时,hexo 会按不同模板里你写好的逻辑去渲染。再进一步理解,就是 hexo 帮你把 md 文档整理成 js 对象并暴露到全局,让你能在任意位置用 JavaScript 访问文档的实际内容,这也是必须用 ejs 的核心原因。然后这些文章要怎么排列、怎么展示、怎么筛选,就是模板干的活。接下来我举其中一个模板的例子来帮助理解。
index.ejs 模板内容解析

发现了吗?其实就是传统的 html 里加上 JavaScript,很简单,只是在告诉 hexo 这个页面要怎么渲染,仅此而已。
layout.ejs 文件的作用
layout 文件很简单,就是一个复用的框架文件。举个例子:比如当前页面的侧边栏,我不可能每个页面都重新写一个,这太蠢了。所以把它放到 layout 里面,然后留一个位置,用来输出当前访问的那个页面,这样就达到了复用的目的。
1 | <!-- layout.ejs --> |
1 | <!-- 访问 index 时,实际输出的是这样 --> |
这就是为什么 index.ejs 这些文件只用写 <body> 内部的内容,不用写一个完整的 html 骨架。
ejs 语言的其他应用
当你想要让主题变得可配置(不改源码的情况下),可以在主题根目录放一个 yml 文件,然后通过前面类似的模板注入方式,动态注入相关 css 或者其他内容。以下依旧举例:



为什么用 stylus?不直接用 css?
答:.css 文件不会被 hexo 渲染,它只是被原样拷进 public/,所以里面拿不到任何 hexo 数据。.styl 文件会被 hexo-renderer-stylus 插件编译,编译时插件往 Stylus 里注入了一个 hexo-config() 函数,这是能在样式文件里读到主题 _config.yml 配置的原因。
最后阶段(部署)
有了以上知识之后,相信你已经跃跃欲试了吧,别急,最后讲一下部署。由于 hexo 写出来的博客完全是静态文件,所以只用 Cloudflare Pages 的免费套餐就行。原本限制每月 500 次 build,因为我们是在自己电脑上 build 的,根本不用管,相当于白嫖了。
但要提醒一个坑:Cloudflare 有缓存机制 —— 新文件有内容更新会顶替旧文件,但如果新版里删掉了旧版存在的内容,那条旧内容还会留在缓存里,出现「我明明删了却还能访问」的情况。只能等缓存时间过期自动删除,或者在那个路径放一个真实文件把它顶掉。
安装 wrangler
1 | pnpm add -D wrangler # 装成开发依赖 |
这里要注意包管理器别混用:
- 项目用的是 pnpm,就一路
pnpm add/pnpm exec。用npm install会额外生成一份package-lock.json,和pnpm-lock.yaml各记一套依赖树,下次pnpm install装出来的版本可能和线上跑的不一样。 - 已经混了的话,删掉
package-lock.json,重跑一次pnpm install就干净了。 npx wrangler也能跑,但 npx 找不到本地命令时会临时下载一份最新版执行,版本不受package.json约束。用pnpm exec wrangler才会走本地装的那个。
之后根据输出内容设置项目名之类的就好了,有问题可以直接问 AI。
结尾
以上,是我两天开发 hexo 博客以来总结的经验。如果有问题,欢迎随时联系我,或者给我发邮件 —— 这个博客是纯静态的,没有留言功能。