最近想扔掉 wordpress,于是……
需求报告:(你需要做到这里描述的表观行为,而具体实现随意)
我要的是一个基于 nodejs 的个人博客 + wiki 系统。我用一个 git repo 来维护它的内容。使用 master 分支的最新内容。
这个 repo 里有若干目录,其中,.common
目录放置公共文件(如 HTML 模板),src
目录放置静态资源文件(如 css),blog
目录放置博客日志,其他的页面则是其他静态页,用于 wiki。
用来存储内容的主要是一种 HTML 替代格式,比如 markdown,或者我自己的 eido。.common
目录之外的所有文件彼此无关(因此不会一个 “内容文件” 依赖其他的 “内容文件”),他们都只依赖 .common
里的文件。
这个 node 应用是一个服务器,当访问非 html 的文件,比如静态资源时,直接返回之。当访问 /path/to/file.html
时,会调用(可配置的,见下文)生成器处理 /path/to/file.xx
,生成一个 html,然后由服务器作为响应。我们假定只要整个目录里的每个文件都没有修改,生成的 html 内容一定是相同的。
文档生成器是另一个外部程序,比如 eidoc
或者 markdownc
。启动这些程序的命令行任意,只要它正常退出后,.html 文件出现就行。
blog
目录里的所有「内容文件」由 git 的最后更新时间排序,且自动生成一个 index.html 作为文件列表;其他目录必须手动维护 index。
整个服务器必须尽可能优化性能(例如使用缓存或者静态文件),同时保持正确性。
(博客的评论使用 disqus 之类的服务因此不用考虑。)