从EMLOG搬家到HEXO

前言

  进入2017年了,这段时间发生的很多改变,促使我回到这个很久没有耕耘过的博客来看看。写博的速度也从以前的每周写到现在的整年荒芜,当然中途有过空间商失效、域名失效等过程,但总之是慢慢变懒了……

  从2009年高中即将毕业的时候建立这个博客,换过域名、换过空间、换过模板,唯独没换过的,是一直用着Emlog这套博客程序,从刚开始的 3.3.0 版本,一直到定格在 5.3.1,一直期待的 6.0 版本也在各种 beta 版本中变成了我的“有生之年”系列。

  元旦收假回来这几天,不知道出于何种冲动,突然地就很想把它搬到一个纯静态的环境下。于是,就把博客从EMLOG搬迁到了HEXO下,顺便写下这篇文章记录过程免得以后忘记……

  新博客正式重新用回了之前的域名 http://www.candura.us
  旧的博客也用个子域名存着用以怀念

搭建HEXO环境

  搭建HEXO环境其实不难,如果是在VPS中搭建的话,简单来说就几个步骤:

  1. 安装nodejs
  2. npm方式安装hexo
  3. hexo初始化博客
  4. 运行服务器

  步骤虽然简单,但是一开始就入了一个nodejs版本的坑。Ubuntu系统下直接用”apt-get”命令安装的nodejs是0.X的官方稳定版,并不支持ES6特性,后续为了博客的搜索功能需要用到一个 hexo-generator-json-content 的插件,需要这种特性来支持,所以要用别的方法来安装新版本的nodejs。

  除此之外由于我个人技术水平及经验的原因,还有一些别的坑点。

坑点1:更新nodejs版本

  首先卸载掉之前直接用”apt-get”方式安装的nodejs

sudo apt-get remove nodejs

  随后再通过增加另外的源来安装nodejs,我这里用4.X系列,要装6.X系列的把下面的代码改成6就行了。

curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs

  这样就成功跨过了第一个版本的坑。

坑点2:插件安装位置

  在使用npm安装完hexo之后,通过”hexo init blog”初始化好一个站点之后,需要装上一些常用的插件,比如上文提到的 hexo-generator-json-content、 hexo-generator-feed 等等。

  由于初次使用不习惯,我直接在上级目录用npm来安装这些插件,结果安装完之后发现站点并没有生效这些插件。后面查看 package.json 发现这些插件并没有被引入到站点中。

  后面才发现这些插件是要在刚才初始化的”blog”这个目录下安装,而不能在上级的目录安装,搞得我差点要去某个插件的github上提交issue了,还好后面发现是自己的问题。

迁移数据

  经历完环境的搭建,选好主题与插件,基本上博客的壳子就有了,接下来是迁移博客的文章,这个虽然没有什么难点,但是却是个累活。

迁移博客文章

方法1:手动搬迁

  手动搬迁就是一篇篇的进入想搬迁的文章复制出来,然后按照hexo的文章语法来粘贴就行了。这个方法最笨但是也最不容易出错,总之就是把想要搬迁的内容复制出来就行了。

方法2:写爬虫生成

  自从有了Python之后,写个简单的爬虫就不那么困难了。不过不同博客的主题不同生成的HTML代码也不完全相同,所以需要慢慢分析格式,做好正则表达式过滤,再生成相应的MD文件。当然变种的方法是直接根据博客的SQL数据来读取内容,异曲同工。这个爬完了有时还是要按需手动做些检查和修改,不过比起一篇篇手动去复制粘贴要快多了。

方法3:直接通过现有工具搬迁

  其实hexo作为一个深受喜爱的静态博客系统,总有人写出现成的工具来实现搬迁的,比如利用”hexo-migrator-wordpress”这个插件可以很方便的把WP博客的导出内容导入到hexo中。但是我用的是EMLOG啊,所以我还是先在本地搭建了一个WP的环境,把EMLOG的数据导入到WP中,再用插件把WP的数据导入hexo。基本上相当于是用WP作为跳板来连接EMLOG和hexo的数据转换。但是这样转换出来还是有一些html标签不能很好的翻译成markdown标签,所以最终还是要手动调整一些的。

迁移图片、音乐等

  我的很多博客内容特别是什么拆机的、维修的都会配有图片,其他的一些拙作也会配上音乐,所以除了搬迁博文之外,这些内容怎么处理还是比较难搞的。

  一开始我想的方法是直接调用老博客上面的图片,但是绝对地址和相对地址之间总是难以平衡,更何况以后万一还要换域名之类的,太不方便了。后面还是决定利用hexo 3.0以后的版本内置的”资源文件夹”功能来转移。

引入图片

  首先在站点的” _config.yml “文件中把”post_asset_folder”功能开启,设置为”true”。然后建立一个与博文的md文件相同名字的文件夹,把那篇博文用到的图片、音乐之类的资源一起放到这个文件夹下,然后用下面的资源引用的代码,来代替原本markdown语法中的插入图片语法就可以了。

{% asset_path slug %}
{% asset_img slug [title] %}
{% asset_link slug [title] %}

引入音乐

  音乐资源也是一样,不过我在这里直接用了 “hexo-tag-aplayer” 这个插件,也是用下面的代码就可以直接插入资源文件夹中的资源了。

{% aplayer "标题" "作者" "01.mp3" %}

迁移评论内容

  其实要不是在EMLOG的论坛上看到有一个把EMLOG评论导出为多说JSON格式的插件,我都没太打算迁移这块内容了,毕竟大部分都是垃圾评论刷SEO的多。后来想想既然有希望能迁移,就一起迁移了吧。

在hexo中开启”多说”评论

  这个其实挺简单的,毕竟大部分hexo的主题直接支持这个功能,在主题的”_config.yml”中开启就行了,如果是主题原生不支持的,就需要参考”多说”的手册来手动在主题中添加代码。

导出EMLOG评论为多说JSON

  这个插件(其实应该叫工具的)的下载地址和使用方法在这里,按照需求安装好之后就可以导出为多说支持的JSON格式了。

修改JSON中的参数

  导出的JSON数据里面包含有以前的博文地址和”Thread Key”参数,博客搬家之后相应的地址是变动了的。以前的”/?post=XX”地址在我配置的hexo环境中变成了”/posts/post-XX”,所以要在文本编辑器里面用正则表达式全部替换掉。

  另外根据上面那个工具导出的JSON中”Thread Key”的值是博客编号,即”/?post-XX”中的”XX”,而hexo中引入的多说评论自动生成的”Thread Key”是”posts/post-XX/“,所以这个地方也要去做替换。

  只有做这些替换的时候真心感觉到还是正则表达式好用啊!前段时间写个小程序比较大规模的接触到正则表达式的使用,虽然我用起来还是半桶水,但经过之前的熟悉,现在这种替换工作还是比较上手了的。

导入JSON数据到”多说”

  最后导入修改好的JSON数据到”多说”里面就可以了,不过貌似”多说”的导入有问题,经常导入不完整,有时候同一个JSON文件要导入多次才能导入完。

后记

  整个搬迁过程说简单也简单,说复杂也复杂。其实在这个过程中,我几乎又从头到尾过了一遍自己以前写过的博文,过往的点点滴滴历历在目,经常勾起各种各样的回忆。在不同的角落找到曾经自己的模样,也许才是这次搬迁中最大的收获……

文章目录
  1. 1. 前言
  2. 2. 搭建HEXO环境
    1. 2.1. 坑点1:更新nodejs版本
    2. 2.2. 坑点2:插件安装位置
  3. 3. 迁移数据
    1. 3.1. 迁移博客文章
      1. 3.1.1. 方法1:手动搬迁
      2. 3.1.2. 方法2:写爬虫生成
      3. 3.1.3. 方法3:直接通过现有工具搬迁
    2. 3.2. 迁移图片、音乐等
      1. 3.2.1. 引入图片
      2. 3.2.2. 引入音乐
    3. 3.3. 迁移评论内容
      1. 3.3.1. 在hexo中开启”多说”评论
      2. 3.3.2. 导出EMLOG评论为多说JSON
      3. 3.3.3. 修改JSON中的参数
      4. 3.3.4. 导入JSON数据到”多说”
  4. 4. 后记
|