我的博客系统折腾手记暨papery正式发布
作者 张洋 | 发布于 2013-08-12
papery

上周花了一个周末的时间,把我自己的博客生成系统彻底重构成较为通用的系统了。这件事其实一直就想做,不过一直没想好怎么在简单和通用间做好权衡。上周接连接到几名同学在微博上问我的博客是用什么系统搭建的,终于促使我下决心把这件事情做掉。目前这个系统已经定名为papery,源码在github上,并可以通过npm直接安装使用。

我写博客也有一段时间了。最早是在博客园上写,后来自己买了VPS,就尝试自己搭建和维护博客。刚开始是用wordpress搭建,不过用了一段时间觉得对于仅仅需要一个系统发布文章的我来说,wordpress太重了,随着内心对纯文本和简洁高效越来越强的偏执,我终于决定放弃wordpress,于是大约在2012年年底,世界末日来临前夕,我大约花了三天写了几个nodejs脚本,用于从markdown格式的文本自动生成网站。

当时只是零散的几个脚本,完全谈不上通用,另外由于没有使用模板引擎,代码也其丑无比,四处散落着html拼接,冗余代码也非常多。不过好歹凑活能用了,就一直没太去管。不过每次想到这个玩意,心里的代码洁癖被触发,还是不太舒服。

其间还对这个系统简单补充了一些文档,放到了github上,当时的名字叫simplog。这次重构本来想继续沿用这个名字,不过在发布npm项目时发现simplog已经被用了,于是改名为papery。

当然当时放到github上的代码仍然是丑陋不堪且没有通用性的。当时心里就有了一定要重构这个项目的想法。

终于上周我做了这件事情,在做之前,我简单调研了一些类似的项目,如jekyll,并对自己这半年使用过程中的不爽和痛点做了总结,列出了整个重构的todo list,包括:

  • 简化安装和使用方式。由于系统是用nodejs写的,所以很自然的希望重构后的系统能完全通过npm安装和升级。
  • 引入模板引擎。我对之前手工拼接html的方式不能忍受了。
  • 通用部分和特化部分分离。之前通用性差的一大原因是里面有很多通用和特化的东西杂糅在一起。
  • 要能通过命令行创建新博客并有调试服务器功能。之前每次修改都需要推到线上才能看到效果实在太痛苦了。
  • yaml代替json作为配置文件格式。关于这点如果你比较一下yaml和json的写法就知道多么必要了。
  • 模板系统、主题皮肤要有可扩展性,用户可以方便的自定义并且支持通过插件实现评论、分享等功能。说实话,这块功能要真做的NB,不免系统会特别复杂,所以我用比较简单的方式实现了基本够用的扩展性。
  • 不做重复劳动。我的核心是要实现博客生成的功能,基础功能充分利用node社区丰富的开源组件,例如用js-yaml做yaml解析,用ejs做模板引擎,用log4js做日志,用connect做server,用ncp实现目录递归拷贝等等。基于npm的包依赖机制可以让这些工作轻松愉快。
  • 把代码写清晰一点。这个就见招拆招了。
  • 详细的使用文档。

经过一个周末的折腾,很高兴上面的目标基本都实现了。至于是不是真的变好了我不敢说,不过我自己用着确实爽多了,代码看着也舒服多了,总算这个项目不会成为我洁癖发作时的心结了。

以上就是我折腾的总结了。最后附上相关资源,papery的详细使用文档已经放在github的README上了,我就不在这里赘述了。

至于papery能做到什么样子,你看到的这个博客就是它目前能做到的样子了。总的来说,papery作为一个新的项目,问题肯定是有不少的,不过作为这个项目的用户,我会不断解决自己的痛点。当然如果你有什么建议或意见也非常欢迎提给我。