思量再三, 还是不用jekyll了. Ruby什么的累觉不爱, 最关键的是我刚装上最新版就直接不能启动...

什么? 没有给空定义match方法. 喂, 还能再详细点儿么? 让我怎么排查问题?

正好听朋友说hexo, 去䁖了一眼, 用Node做的. 文档真的是...(省略吐槽无数). 擦擦嘴, 喝口水. 其实做得挺不错的, 除了默认主题有点儿丑外加文档很烂以外.

折腾了几天, 基于一个主题maupassant进行了不少修改, 删除了大量我不需要的功能, 然后大改css, markdown解析以及高亮. 最后除了页面结构差不多, 其他的都差很多.

我这也算是自己弄了个主题?

我觉得hexo不错也许是因为我没有发现jekyll好用. 反正我暂时不会用jekyll了. 刚开始down下来默认模板的时候, 看了一下package, 带了一些category, tag之类的生成器, 一个markdown解析器用的marked, 然后还有个sass解析器的样子. 高亮是用的highlight.js, 这个已经被hexo内置了.

其实我还是要吐槽的!!

不过槽点并不是很多, 嗯.

配置文件

其实我很喜欢gulp的想法. 扔掉键值对的配置文件, 直接用代码来配置. hexo完全基于Node, 所以为什么不直接用代码来配置? 讲真, 翻看源码的时候看到了一个用代码写好的default config的Object, hexo的逻辑是先加载default config, 然后加载我们的yml写的config文件去覆盖. 真的, 让我们直接写js吧, 最后吐出一个Object就行了, 这样就能完美解决插件配置的问题.

marked

首先是markdown解析. 好吧, 本来用marked挺好, 可是呢, marked需要配置啊, 默认的行为当然不是我想要的, 我需要修改它对head, table, code等的解析. 但是这些修改需要修改renderer的方法, 很显然, 这需要code. marked插件的源码我也读了一下, 它会去config对象上获取非常简单的能够用键值对配置的信息, 对于修改renderer无能为力. 因为hexo的做法直接屏蔽了这种可能性.

于是, 我自己写了插件... sigh. 没有做成npm包的形式, 而是直接在scripts文件夹里面写了一个简单的js. hexo说这里的脚本会在hexo启动的时候执行.

highlight.js

真是欲哭无泪, 没有你这么内置的!! 我都只能用非常规手段去require人家原始的包了. hexo内置后, 也只能配置非常少的高亮信息, 对于需要代码配置的仍然只能干瞪眼. 于是, 我禁掉了配置文件里面的高亮, 在我的简单的小脚本里面(是的, 还是那里)在marked解析code时就把高亮了一起解析了. 于是, 页面终于能够正常处理markdown了.

缓存

我... 提起这个我无语凝噎. 这缓存做得, 真是绝了. 反正我又写了个小脚本在hexo要处理文件的时候删这个缓存, 这次没有放在主题里面而是放在hexo主目录里面, 因为我觉得有一天应该会处理掉这个问题, 这个小脚本不应该是主题的一部分.

当时是这样的. 写了一点儿内容, 改了点儿css的我兴冲冲地调用了一把hexo s -l. oh, yeah! 页面! 然后我又改了一点儿内容, 刷新. 刷新? 刷新??? 为毛线没有变呢? 看日志是有请求的. 于是我重新启动了server, 还是没变!! 什么情况, 不明真相的我看了看文档, 说有缓存, 删掉试试? 然后就好了. 过了一会儿我再改, 又不给力了. 真的是很无奈, 我并没觉得那个缓存有什么帮助, 删!

休息一下, 吃根香蕉

hexo是个Node的程序, 那就意味着Node的辣么多包都是可以搞起的, 虽然我不会. 看起来hexo的架构设计得还不错, 没有仔细研究, 它大概是把事情分成了好几部, 处理文件, 渲染post, 生成各个页面等, 还有filter神马的没仔细看. 每个步骤都可以充分发挥你的想象去做事情, 只要符合规范就好. 而且它可以很好地发挥Node的异步特性, 让页面并行生成.

目前我的模板是用的jade, css用的scss来写, post当然是markdown啦.

我的侧边栏和原版的不一样哦, 不会滚出屏幕哦, 不会看到文章后边的时候觉得页面空空的, 也不是单纯的吸顶, 要考虑内容长过窗口高度的情况. 反正是费了点儿功夫, 代码很简单, 也已经把这个做成了一个可开关的功能.

分享的那个小弹窗觉得原版做得不合理, 于是也改了一下, 布局方式改了, 并且把里面的项目做成了可配置. 其他还有不少改动主要是改进一下布局方式和删了不少代码.

总之

我觉得一定是我没有弄明白人家的牛逼之处, 还吐这么多槽, 笨死了🙁.

其实不就是个静态博客系统么?! 可是折腾的天性加上Node让我很很看好hexo, 是不是github page也支持一下hexo? 哈哈, 这样我就不用每次都要先generate再提交了. 大家也来用一下哇~