之前这个博客是以Hexo搭建的,搭建过程参见在VPS上搭建静态博客站点。Hexo在功能性上没有什么不好,但它是由自己并不熟悉的nodejs所实现的,一些时候自己想要进行小修改时发现无从下手,所以想着切换回自己熟悉的语言所实现的工具。
Pelican本是首选,之前也使用过。但想着每次在这些不同框架中切换,除了某段时间记清楚它们的配置,自己也不会学到啥。不如趁此机会自己实现一个可用的静态博客框架。这并不是一个什么困难的或是很复杂的的项目,简单估计了下大约一、二个工作日的工作量。于是说干就干。
静态博客的功能点
在动手编码之前,先来弄清所需的功能点,对于静态博客来说,大的功能点只有两个,
- 支持Markdown或是其余标记语言
- 支持切换主题
其余一些小功能需求都很容易添加,比如,
- RSS Feed生成
- 代码高亮支持
- Disqus评论集成
- Google Analytics/百度统计集成
- ...
其余一些更细微的功能,则没有必要在一开始就考虑,待到自己需要时再慢慢添加也来得及。
功能设计与实现
首先是编程语言的选择,自己最擅长的程序语言是Java、Python。Java用在这里显得有些过重,因此还是选择了Python。项目代码结构清晰明了,基本由两部分构成
- Parser
- Generator
Parser模块负责处理标记语言到HTML的转化,Generator负责最终HTML页面生成。参考了Pelican的实现,具体实现细节不再赘述。需要说明的是使用到的各种库,
- Markdown,用于Markdown解析
- Jinja2,用于HTML生成
- Pygments,用于代码高亮
底层实现借用了上面这些开源实现,所以代码逻辑实现得比较快,算上调试时间,差不多一天就完成了。目前默认主题样式参照了NexT,由于自己对Web前端知识了解有限,在样式调整上花费了差不多两天时间。
总结
自己动手实现静态博客算不算是NIH综合症的一种表现呢?从产品层面上来说,这毫无疑问。目前的实现比之这些开源项目是有很大不足的,但从学习层面上来说,在实现的过程中,可以学习了解不少东西,学到的内容可比简单去部署这些项目有意义的多,后续随着项目代码的进化,未必不能比它们更好。