• 716-472-4484
  • ptsteadman@gmail.com

创建 Hexo 主题的笔记


环境搭建

更新 NPM:npm install npm@latest -g

在 2015 年,使用 NVM 是比较合理的选择。NVM 安装说明

更新 NPM:npm install npm@latest -g

Hexo:为什么在 source 里不能使用 helper 函数?
这应该写进文档里。

在 Hexo 里创建自定义首页文件

我尝试在 source 里生成自定义首页文件时,无论怎么做,hexo 都会忽略 source/index.md。最后我只能卸载 hexo-generator-index,这样才生效。参见这里。因此这会成为我的主题搭建流程的一部分。我觉得这样做是值得的,因为它能更好地把主题和内容分离开。让所有人去改主题的 index.ejs 模板并不理想。

Hexo 渲染原始 EJS 的问题

有时服务器会继续渲染旧版本的代码,而且是以纯文本的形式显示。所以我会看到类似这样的内容:

<% if (site.tags.length){ %>

这其实就是未渲染的 EJS。重启服务器或执行 hexo clean 也没用。

过了一阵我才意识到,是因为 gedit 的交换文件被 hexo 当作真实布局文件读到了,比如 tag.ejs~。我的 partial helper 写的是 <%- partial('_partials/tag') %>,但 hexo 读到的是 tag.ejs~ 而不是 tag.ejs,所以 EJS 根本没被渲染。

解决方法很简单:把 partial helper 改成 <%- partial('_partials/tag.ejs') %>。问题就解决了。

Hexo 摘要变量

我一开始对 hexo 的 excerpt 变量行为很困惑。如果你在 front matter 里写 excerpt: something,hexo 会忽略它。要生效,需要在文章源文件里加入 注释。或者你可以安装插件,让你在 front matter 里自定义摘要。

Scripts 目录

我发现得太晚的一件事是主题目录里的 “Scripts” 文件夹。在 Hexo 中,站点结构是由各种插件驱动的,而不是像 Jekyll 那样靠文件和目录的位置来决定。插件会以编程方式创建目录结构等内容,而在 Jekyll 里我主要通过 liquid 模板来组织站点结构。

问题在于,用户总会想扩展 hexo 做些自定义的事情。如果每次都要发布一个新插件,工作量太大了。而主题层级的 scripts 目录允许我们在“用户空间”里有效扩展 hexo 的基础功能。