博客从 Ghost 迁移到 Hexo

不知道是不是我的错觉,Ghost 这两年已经慢慢过了气。就像所有功成名就、开始赚钱的开源项目一样,一旦宣布商业化那基本就是宣告停止增长、甚至开始下滑,当然 Docker 这样牛的勉强可以除外。

当然,也有可能是我喜新厌旧,现在看 Ghost 觉得并没有一定要用它的理由了。随着 Markdown 用的越来越熟练,以及购买了用的十分顺手的 MWeb 编辑器 之后,Ghost 引以为豪的 Editor 对我而言也优势全无。而 Hexo 近年来发展的很好,精致的主题也越来越多呢!(说白了还是因为脸)

下面说正经的。

Pros: Hexo 有哪里好?

  • Markdown 格式,方便本地保存以及迁移
  • 社区活跃,使用问题基本都能 google 到答案
  • Hexo + NexT 主题基本不用折腾就能满足我的所有要求,比如自带 MathJax
  • 最近墙变高了,很容易迁移到国内的静态页面托管平台(比如 coding.net)

Cons: 迁移代价

  • 因为之前的用了 isso 开源评论系统懒得迁过来了,丢失一堆评论
  • 你可能因此浪费一个周末。

从 Ghost 导出内容

Ghost 一直很良心地在实验室页面保留了一个 export 按钮,导出后是一个巨大的 JSON,包含所有文章以及一些元数据:修改日期、Tags 等等。

但是 Ghost 1.X 开始启动了一个mobiledoc 的文档格式。突然得知这一消息的我是一脸懵逼的,说好的 Markdown 呢?根据这个 Issue所述:

你知道的,我们现在的编辑器非常烂,不好用,还有一堆 Bug!

所以我们决定 Mobiledoc 重新做一个!Mobiledoc 很棒,mobiledoc 就是未来!

Emmmm…… 好吧,你开心就好!

后果就是无论是 Ghost 导出的 JSON 还是数据库,都只有 mobiledoc 文档而没有 Markdown。所幸的是,Ghost 产生的 mobiledoc 也很奇葩,是把 Markdown 强行塞进去了。

后面会在导入时处理这个问题,先点实验室里的 export 拿到 JSON。

对于图片等资源,我们到 assets 文件夹下,打包下载下来即可。

将内容导入 Hexo

根据 Hexo 官方的安装指引在本地装好 Hexo。

时间充裕的话,可以顺手把 NexT 主题也给装了。

导入文章 Markdown

之后我们开始导入文章。Hexo 是留了 migrator 插件接口的,GitHub 上能找到一个名为 hexo-migrator-ghost 的插件,但是已经年久失修。于是我帮他修了一下 bug,其中也包括从 mobiledoc 中解出 Markdown 代码。

你可以直接把我的 Repo git clone 到 node_modules 里:

1
git clone https://github.com/fuyufjh/hexo-migrator-ghost.git ./node_modules/hexo-migrator-ghost

然后运行:

1
hexo migrate ghost ghost-export.json

导入图片等资源

原来的资源都是放在 contents 目录下的,格式大概是 contents/2017/10/29/imagename.jpg

只要把 contents 改成 images 放到 _post 目录下,然后,用你喜爱的编辑器(或者 sed)对所有文章做一次全局替换:

1
/images/ -> /contents/

hexo serve 试一下,应该可以看到图片了!

最后,做一些必要的配置

自己琢磨去吧!