2016.01.06更新:用 React + Webpack 又写了一遍,啊,折腾吧。
2015.03.10更新:基于 gulp 重写了一遍博客程序。代码量立减,gulp 果然好用。
寒假在家,我把托管在 github 上的 Jekyll 博客拆了,自己用 nodejs 写了一个静态站点生成的小工具,专门用来生成我的博客。回头想想,这两年我的博客来来回回折腾了好多回,干脆写一篇文章简单总结下吧。
最初决定自己建独立博客的动机很简单:门户网站或者专业的 IT 博客网站(比如新浪博客或 CSDN)的页面太丑陋,广告铺天盖地,简直太不爽了。虽然提供一堆花花绿绿的主题,但无非也就是换个背景图片,换个配色而已,根本无法自己定制。这一点博客园相对比较好,因为它允许用户自己定制 CSS 样式,自己加入 JS 脚本。虽然还是不能控制输出的 html,但至少我可以控制布局、字体,还可以用 display:none
把不想要的东西(比如广告)隐藏掉。所以我一直维护着我在博客园里的博客。
至于独立博客的折腾过程,简要回顾一下:
最初,我用 asp.net 在实验室的机器上写了一个博客站点,把博客手动写成 xml 文件(汗呐),然后 C# 读文件,输出网站。很快我就放弃了。
后来我接触了 WordPress,如获至宝,在自己的机器上装了 PHP 和 MySQL,装了 WordPress,下载并定制主题,装各种插件,不亦乐乎。WordPress 的主题大多是英文的,各种字体字号搭配也是为英文博客设计的,要改成中文风格的还确实挺费劲。为了能够在外网访问,我还去新网买了域名,在实验室的路由器上做了端口映射,第一个 WordPress 博客就搞定了。
虽然实验室的机器24小时开着,但毕竟不是专业的服务器,总是莫名其妙上不去,而且研究所的网络太渣渣,外面访问我的网站速度很慢。于是我打起了租空间的主意。淘宝上有很多便宜的香港空间,我挑了一个评价还不错的「3A网络」,租了一个 200M 带 MySQL 数据库的小空间,把自己的博客迁到那个空间上去。这又是一番折腾。我的博客在这个香港空间上呆了挺久,那段时间同时维护着博客园的博客和独立博客,博客园里就写得随意一些,独立博客只存一些自己认为比较好的,整理过的文章。
WordPress 虽然好用,但是太笨重。因为文章数据都是存在于我「看不见摸不着」的数据库里面。每次修改文章,WordPress 只是保存最新副本,修改前的文章还是存在数据库里。长此以往,数据库的体积就会膨胀。当初把博客从自己的机器上迁移到租用的空间里,数据库怎么都导不过去,最后实在没办法,一篇一篇复制到编辑器中再保存的(汗)。而且这个廉价的香港空间,速度一开始还可以,后来越来越慢,最后连 ftp 都要连半天才能上去(当然可能是我们研究所网络太渣渣),我就下决心再折腾一下。当时我曾经把 WordPress 博客迁移到新浪云SAE上,这个博客 xieguanglei.sinaapp.com 现在还能访问,虽然里面没什么东西。后来我很快就发现了更好的东东,牛逼闪闪的 github-pages。
github-pages 提供快速又稳定的静态站点托管服务,独立博客再适合不过了。虽然有人认为在 gh 上建站在「道义」上不合适,但 gh 的公告就鼓励程序员用这项服务来建立博客,而且我连图片都是自掏腰包买的网易云相册外链服务,所以,嗯。于是继续折腾,装了 ruby 和 jekyll,还是自己定制主题,并开始用 markdown 写博文。博文以文本格式存储的,随时可以备份和修改,在 sublime 里写博客的感觉太棒了!
过了一段时间,我又觉得小不爽了。因为折腾来折腾去,还是在改 CSS 和网页模版,而不能控制整个网站的结构。去读 Jekyll 源码还要先学 ruby,成本太高,看了看另外两个静态站点工具: Python 的 Pelican 和 NodeJS 的 Hexo,都是高大上的玩意儿,一时半会儿玩不转。最后,我决定用 nodejs 自己写一个简单的静态站点生成工具,以后有需求了再往里面添加内容,于是就有了 NodeBlog。现在的博客,就是用这个工具生成的。虽然很简陋,但却是自己的东西。
现在这套东东,nodeblog 方面依赖了两个外部库,一是 marked,用来将 markdown 转化成 html;另一个是 ejs html 模板。纯前端方面,数学公式渲染用的是 MathJax(强烈推荐,这玩意儿太逆天了),评论系统用的是本土的多说,代码高亮用的是 highlightjs,都是嵌在模板里面。
作为一枚前端,折腾博客肯定还是有收获的。但其实,一个博客的灵魂还是内容,而不是它的样子。我很膜拜那些能够数年如一日写高质量博客的人,因为需要不断创造高质量的内容,必须是不断进行高质量的学习和思考,而后一点,真的是很难很难(需要无尽的毅力和好奇心)做到。
勉之!
(完)