在 Ghost 1.0 之前, 把它批判一番

Ghost 现在有很多问题, 如果你要建立一个 Ghost 博客, 建议等到 1.0 版本发布以后.

本文列举 1.0 版本之前存在的一些问题, 不排除持续更新的可能性.

支持的 Node.js 版本过旧

Ghost 主要维护的 Node.js 的版本是 Node.js v4.5.0 (LTS), 这个版本已经相当老了, 目前的最新版本为 v6.6.0, 新版本相比旧版本已经有了很大变化, 有很多语言特性不再需要 polyfill 就可以使用, 可以说是没有继续使用旧版本的必要, 坚持与 LTS 同步只会让项目继续依赖特定的 polyfill 实现, 为将来的版本更新积累更多的维护成本.

依赖模块版本过旧

Ghost 依赖的模块版本很旧(有一部分是被 LTS 拖累的), 而且可以看出他们根本就不关心依赖模块的版本. 为什么这么说呢? 因为 Jade 都已经改名为 Pug 了, Ghost 还在用 Jade 作为依赖, 每次npm install都会有提示了, 改个名字的事情, 很难吗?

使用旧的模板版本还会带来安全隐患, Ghost 使用的 minimatch 模块版本为 2.0.10, 该版本存在明显的安全问题, 模块的主版本号已经升级到 3 并修复了该问题, 但 Ghost 却没有更新此模块.

可怕的是, 目前最新的 1.0 alpha 版本仍然在使用旧的模块, 但愿只是因为他们还没有改到这一块.

有问题的数据库升级脚本

在 Ghost 支持时区之前, 数据库中的所有时间字段都是以 UNIX 时间戳的形式保存的, 支持时区后时间字段都改为使用 moment 模块生成的字符串.

支持时区固然很好, 可 Ghost 的数据库升级脚本是有问题的, 以至于旧的时间字段并不会被重建为新的格式, 所以数据库里会同时存在着两种时间字段的格式, 一种是旧的 UNIX 时间戳, 一种是 moment 模块生成的字符串, 由于 Ghost 在后台页面以外的排序方式并不严谨(我也是不懂为什么不前台后台共用代码, 看着源码的 SQL 拼接真他妈糟心), 排序时所有使用新的时间格式的记录会被排到前面, 即所有新建/修改的文章都会优先于旧文章, 这就导致了那些后来编辑过的旧文章会被排序到新文章的前面.

一般来说, 这还不算是什么大问题, 尽快出个补丁版本修复掉就行了. 可从 Ghost 0.9.0 加入时区支持后, 到现在的 Ghost 0.11.0, 3 个子版本号过去了依然存在着从低版本到高版本升级时的数据库迁移问题. 官方的确有在编辑代码尝试进行修复, 可是这么多个版本过去都没有修好, 实在是让人怀疑开发团队是否有测试过代码.

我自己写了一个脚本 transform.js 试图通过导入导出JSON的方式解决此问题, 但受限于 Ghost 烂架构的古怪特性(早在2014年就应该实现的导入去重功能至今没有实现), 我为了保证博客评论框数据的完整性, 自己无法使用该脚本进行迁移, 只能等待官方进一步修复此问题.

更新: 经反映, 官方近期推出的 0.11.1 已经修复该问题.

陈旧的架构

不得不说我当时放弃 WordPress 就是因为 WordPress 的架构太旧了, 为了版本的兼容性和庞大的用户数量, WordPress 已经失去了作为程序在架构上应有的尊严.

Ghost 是 2013 年建立的项目, 3 年过去了, 它的架构也开始变得臃肿, 失去了美感, 现在 Ghost 必须进行一次重构来解决架构设计的问题, 否则会被当前的垃圾架构(不开玩笑, 就是垃圾)严重拖累开发速度.

官方正在开发的 1.0 版本应该一定程度上会解决问题, 要是到了 1.0 架构没有明显改善, 还是这副德行, 差不多可以考虑换博客程序了.

迟迟不实装本地化

之前 Ghost 组织了一波社区翻译, 我也贡献了部分翻译, 现在已经有 4 种语言翻译进度达到 100%, 中文的翻译进度也已经到达了 95%. 从组织翻译到现在已经好几个版本过去了, Ghost 没有一点实装本地化的迹象.

我想说的是如果再过几个版本, 旧的翻译就过时了, 当时翻译的不少内容还是 Ghost.org 在线服务的文本, 再不实装本地化, 相当于让社区为 Ghost 的收费服务白干了一回活, 志愿者的努力全部白费.

迟迟不正式公布 App

App 是 Ghost 计划支持的插件功能, 现在其实是可以用的, 官方已经给 Ghost 装了一个 Slack 的 App. 但即便如此 App 仍然处于未正式公布的状态, 官方没有提供任何有用的文档, 第三方开发者无从下手.

我知道 App 的设计确实需要慎重考虑, 但这个功能已经被搁置太久了, 有很多人就指望着 App 的正式公布, 以便能够更平滑地将博客迁移到 Ghost.

粗糙的 Markdown 编辑器

Ghost 的 Markdown 编辑器非常粗糙, 几乎只完成了基本的语法转换功能, 字数统计和预览的滚动同步一直存在问题. 同时, 这个编辑器对于大段文字的处理性能非常差, 我写超过 1 万字符的博文时能够明显感受到编辑器的输入延迟. 而且整个 Ghost 的 Markdown to HTML 渲染似乎是和编辑器本身挂钩的, 偶尔你遇到编辑器有问题, 很可能最后出来的页面就和你预期的有所区别.

据官方的说法, 1.0 会更换 Markdown 编辑器, 但愿能有所改善.