做独立博客,除了坚持写文章,还要面对技术上的一堆琐事。比如想给所有的博客换一个模板,最原始的做法,得一篇一篇去改。改完后如果还不满意,只能重来一遍。
这类琐事逐渐多起来,就催生出自动化的工具。程序员的世界里从来不缺少工具,即便像维护独立博客这样小众的需求,竟也有好几种工具可选。对于有选择障碍的同学,希望本文能帮到你。
使用Markdown 语法写博客,可免去把文本转换成 HTML 的痛苦,因此对 Markdown 支持得好,是下面一切选择的前提。支持 Markdown 的博客工具之中,比较入眼的有 ghost, Jekyll 和 hexo。
ghost
ghost 目前人气最高,号称是要取代 WordPress 的下一代博客平台。不过问题也正在于此,它的目标定位是博客平台,像 WordPress 一样重量级。仅用于一个独立博客,有点高射炮打蚊子的意思。最关键的一点,ghost 生成的是动态网站,依赖数据库,我的直觉立刻让我放弃掉了 ghost。
为什么我要排斥数据库?一个原因是我对纯文本有偏爱,感觉上要比二进制可控。但主要原因还是出于我的一个顾虑,说来可笑:我希望到了年老昏花的时候,这个博客依然在。
那时可能已经写不动了,技术上的事更折腾不了,但我希望它还能运行,能看。站在今天,无法预料那时候是什么操作系统,天知道 nodeJS 能不能坚持到那天,更别说 ghost。唯一能确定的是,越简单、对环境依赖越少,就越有可能长命百岁。我可不想到时候发现博客打不开了,戴上花镜趴上前去一看,db connection error。
相比动态网站,静态网站对环境的依赖少得多,可移植性好。剩下的 Jekyll 和 hexo 都是生成静态网站的,它俩虽然用起来有差异,其实是殊途同归,最后的目标都是静态页面。
Jekyll
Jekyll 的流行,与它被 GitHub 使用有很大关系。GitHub 上的每个项目都可以有自己的主页,可定制程度很高,可以绑定域名。开发者按照 Jekyll 的格式写好后提交,GitHub 会自动生成页面。就是说,如果仅在 GitHub 上托管网站,你的本地其实不需要有 Jekyll 运行环境。但是做独立博客总不能依赖 Github,一切都要自己动手,麻烦就来了。
首先 Jekyll 的依赖太多,要求本地安装 python、ruby 和一些库。这对 Windows 很不友好,光是安装那一大堆依赖就不轻松,更别提文本编码方面的 bug。我一上来就吃了不支持中文的当头一棒,修改 ruby 代码指定成 UTF8 才踉踉跄跄搞定。
网上读 Jekyll 的文档,总觉得它的语法和功能不够酷,作为程序员实在是对它无爱。所以用了一段时间后就不断寻找替代品,有幸遇到了下面要出场的 hexo。
hexo
hexo获得的关注虽不如前两者,但它有几点很讨人喜欢:
- 依赖少(仅依赖 node),易于安装
- 台湾人写的,不用担心对中文支持不好
- 对程序员友好,要是愿意折腾还是有的折腾的
基于以上原因,我最终选择了 hexo 作为维护博客的工具。
安装
首先,我假设你的机器上已经安装了node。安装好 node,就可以用强大的 npm 命令来安装其他东西。
调出命令行,执行下面命令安装 hexo: npm install hexo -g
安装完后就可以执行 hexo 命令,这个页面列出了所有的命令。
作为入门者,不用上来就学会所有的命令。只在关键路径上,有几个命令需要掌握,下面逐个讲解:
hexo init 目录名
例如
hexo init blog
上面这条命令会新建一个名为 blog 的文件夹,然后在里面创建一大堆文件。
完成后进入这个文件夹,以后就都要在这里捣鼓了。
写文章
文章指的就是组成博客的一篇篇 post,一般用 md 格式,除非你的 md 原稿找不到了,html 格式也认。
把写好的 md 文件放在 source/_posts 目录下,它将是你以后最常打交道的目录。该目录下的 hello-world.md 是一个文章的范例,打开它,看到下面内容:
三条横线上面的部分是文章的元数据,见文知义没什么可说的。其中 date 还是要强调一下。因为经常要按时间排序、归档,所以 hexo 给每篇文章都打了一个时间戳。如果不显式指定时间,hexo 默认会用 md 文件的创建时间。
运行网站
在 blog 目录下,执行命令
hexo server
用浏览器打开 localhost:4000 就可以看到你的博客网站了!
生成静态文件
注意,你刚刚看到的页面并不是静态的。若要得到静态文件,还需执行一条命令:
hexo generate
该命令会创建一个目录 public,并在 public 下生成所有的静态文件。有了这些静态文件,只要有一个 web server(例如 Nginx)就可以独立运行网站了,完全没有其他依赖,这是 WordPress 和 ghost 无法比拟的。
配置文件
blog 目录下的_config.yml 里有很多配置项,先解释几个初学者最在意的:
- title: 博客主页标题
- url: 你的博客网址,例如http://yoursite.com
- permalink: 每篇文章的 URL 链接格式,例如:year/:month/:title/,注意不要漏掉最后的/
- date_format: 每篇文章日期的格式,如 YYYY-MM-DD 会显示 2014-01-01,具体格式设置方法参考moment.js
- per_page: 每页显示的文章数量
修改_config.yml 要格外注意,每项冒号后面都加一个空格,另外不要出现 tab。
如果对博客样式没有个性化的需求,那么以上就可以满足了。但我相信有意愿搭建独立博客的人,一定不会止步于此。
深度个性化当然需要很多配置工作,可能还要手写代码。今天先入个门,后面还会继续研究 hexo,及时整理分享出来。让爱折腾的人看着我的教程,不费太多力气就能搭出一个完全自己说了算的博客。