IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    迁移博客到 Hexo

    子龙山人发表于 2015-09-03 05:50:26
    love 0

    本文主要是记录我是如何把博客从 Octopress 迁移到 Hexo 上面去的,同时解释了我为什么要这么做。

    为什么要迁移到 Hexo

    Octopress 我已经用了 3 年多了,中间有换过一次 Wordpress,后来还是又换回来了。我在迁移博客到 octopress 中已经讲过我为什么不喜欢 Wordpress 以及后来转到 Octopress 的原因。这一次我又要打脸了,我又一次折腾了博客。(明明说好了不再折腾的)真是生命不息,折腾不止啊。这一次我又要折腾 Hexo 了。这次折腾的主要原因是,Octopress 太慢了。我现在的博文数量才 50+,生成速度明显感觉不行了。换了 Hexo 后,速度至少是 10+倍以上的提升。另外,Octopress 的架构其实有问题,它有点像 Oh-my-zsh 的架构,All in one,但是 All in one 的东西往往就意味着强耦合和不好的设计。而 Hexo 借鉴了 Octopress,并且很多地方兼容 Octopress,这也是我为什么迁移的原因之一,因为迁移的成本实在是非常低的。另外,Hexo 是由台湾同胞发起的 Node.js 项目,里面很多中国人在上面讨论和交流,这也可以算是迁移的一个原因吧。

    迁移过程

    迁移过程比较简单,阅读官方文档 ,先在本地新建一个 Hexo 的博客,然后把以前 Octopress 的博文从 source/_posts 目录全部拷贝到 Hexo 的 source/_posts 目录。然后修改_config.yml 里面的 new_post_name:为

    new_post_name: :year-:month-:day-:title.markdown
    

    就这么简单,分分钟就迁移完了。

    接下来就是一些常规的配置了,优化主题,去除 Google 字体,使用国内 Jquery CDN 安装各种小挂件和插件了。这里我就不展开了,因为是国货,中文资料特别丰富。我这里给大家推荐一个链接 ,里面博主写了很多文章,都很详细。

    迁移 Org-Octopress

    修改 permalink。

    permalink: /blog/:year-:month-:day-:title.html
    

    修改 Org-Octopress 的根路径

    不要放到 source 目录下面去,因为 Hexo 的渲染引擎不支持 Org 文件,会报错。最好是放到 Hexo 博客的根目录。

    需要导出的文件要放到 source 目录,但是需要添加 skip_render 信息。

    因为我之前有写一些 WebGL 的 HTML,所以我的 skip_render 配置如下:

    skip_render: [webgl/*, webgl/**/*]
    

    如果不配置这些,你的 js 文件里面的引号什么的会被转义,引起语法错误。

    最终我的目录结构如下:

    2015-08-02-blog-to-hexo_hexo-directory.png

    Emacs 集成

    首先,前面我在使用 Org-mode 来写博客 中提到了 Emacs 自动截图并放到对应 images 目录的方法,迁移到 Hexo 后,只需要把 images 目录放到和 blog 目录同级即可。(具体见上图)

    其次,因为 Hexo 不支持 Org 渲染,实际上 Octopress 也是不支持的。我现在是把 Org 导出来 HTML,但是,默认的导出不太方便。另外如果 Org 文件没有修改是不会导出的(使用 universal argument 可以,但是太麻烦)。我这里写了一个小函数,可以每次强制导出:

    (defun zilongshanren/org-save-and-export ()
      (interactive)
      (org-octopress-setup-publish-project)
      (org-publish-project "octopress" t))
    (evil-leader/set-key-for-mode 'org-mode
      "op" 'zilongshanren/org-save-and-export)
    

    最后,针对 hexo server 和 hexo deploy -g 命令,我编写了两个 Prodigy 服务。

    (prodigy-define-service
      :name "Hexo Server"
      :command "hexo"
      :args '("server")
      :cwd "~/4gamers.cn"
      :tags '(hexo server)
      :kill-signal 'sigkill
      :kill-process-buffer-on-stop t)
    
    (prodigy-define-service
      :name "Hexo Deploy"
      :command "hexo"
      :args '("deploy" "--generate")
      :cwd "~/4gamers.cn"
      :tags '(hexo deploy)
      :kill-signal 'sigkill
      :kill-process-buffer-on-stop t)
    

    小结

    本文使用 Org-Octopress 编写,使用体验跟之前几乎没有差别。惟一的缺点是,之前配置好的 emoji 不起作用了。期待社区早日支持,另外,默认的代码着色是 tomorrow 主题,我还是希望改成 solarized light,这样,代码在 Emacs 里面的着色和导出后是一致的,这个后面再改好啦。最后,我还希望给博客添加 Travis CI,每次当我 push 的时候,会自动部署到我的阿里云服务器上。

    Node.js,我来啦。



沪ICP备19023445号-2号
友情链接