将 Hexo 从 2.8.3 更新到 3.1.1

前言

最近发现 Hexo 更新了,于是乎考虑也跟风更新一下 Hexo,便有了此文,记录一下更新的过程。

更新 Docker Image

因为我现在已经变成了一个不算狂热的 Docker 粉丝,且博主有各种强迫症,所以不想本地的 Node.js 环境被各种「污染」,于是乎可以用 Docker 封装的,都已经被我给 Docker 化了。同样的,Hexo 也未能幸免的被我给 Docker 化了。

如果大家想偷懒的话,可以直接使用我已经做好的 Hexo Docker 镜像。

1
docker pull tommylau/hexo

然后配合下面的脚本来使用,就可以好像本地使用 Hexo 一样了。

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
# Please place this file in /usr/local/bin, and set the execution right.
COMMAND=""
PARAMS=""

if [ "$1" != "bash" ] && [ "$1" != "npm" ]; then
COMMAND="hexo"
if [ "$COMMAND" == "hexo" -a "$1" == "s" ]; then
PARAMS="-i 0.0.0.0"
fi
fi

docker run --name=hexo -ti --rm -v $(pwd):/hexo -v ~/.ssh/id_rsa:/root/.ssh/id_rsa -v ~/.ssh/known_hosts:/root/.ssh/known_hosts -v ~/.gitconfig:/root/.gitconfig -p 4000:4000 tommylau/hexo $COMMAND "$@" $PARAMS

那么相比较原来的 Hexo Dockerfile,修改了什么呢?其实,只是将

1
RUN npm install hexo@2.8.3 -g

修改成了

1
RUN npm install hexo-cli -g

而已。囧rz,好吧,其实真的就是这么简单。当然,这只是说如何安装新版本的 Hexo,但是后面才是比较痛苦的。

更新旧的博客目录

当我进入旧的博客目录后,发现使用 hexo 命令,已经不能正常识别了。这个时候我发现,除了重新初始化以后,似乎并没有什么更好的解决办法了。于是乎,我运行了如下命令:

1
hexo init

得到了如下的提示:

1
2
INFO  Copying data to /hexo
INFO You are almost done! Don't forget to run 'npm install' before you start blogging with Hexo!

然后发现,好多文件都被修改了,比如 _config.yml, package.json 还有 themes 里面的部分样式等等。

这个时候,就只能手动的对比各种文件了。因为我使用 git 仓库管理,所以可以直接看到文件的改动。如果你没有使用类似 git 之类的版本控制软件的话,强烈建议备份后,再执行升级操作。

根据自己的需要调整好各种文件和配置,比如 _config.yml 里面的 title 啊什么的。因为初始化以后,都是默认值,需要根据自己的实际情况重新再设置一次。

各种坑来了

GitHub, rsync 同步失效了

好了,都重新设置好了以后,应该可以正常使用了吧?试验一下 hexo generate,嗯,妥妥的,没问题。

接着再来 hexo deploy 一下,what the huck?

1
2
3
% hexo deploy
ERROR Deployer not found: github
ERROR Deployer not found: rsync

GitHub 和 rsync 同步博客内容到服务器的方式失效了?!搬出万能的 Google,搜索后发现 Hexo 相关的 Issue 页面,根据用户反馈,使用 git 方式替换原来的 github 方式。

然后在命令行执行如下命令,增加 Deployer:

1
2
hexo npm install hexo-deployer-git --save
hexo npm install hexo-deployer-rsync --save

注意:我使用的是 Docker 版本,未使用 Docker 的同学,请移除命令行最开始的 hexo 命令。

再来执行一下 hexo deploy

1
2
INFO  Deploy done: git
INFO Deploy done: rsync

嗯,效果不错,看来可以正常使用了。

链接失效了

打开自己的网站,看看更新的成果。首页没有什么问题,很正常,随便找个链接打开看看。什么?提示 404 Not Found?这怎么可能?

重新生成和部署了几次,结果依旧,各种链接不正确。再次使用 Google 大杀器,找到了如下文章:Permalinks are generated incorrectly when relative_link=true。看来是相对路径引发的血案。将 _config.yml 中的 relative_link 修改为 false 后,问题解决。

总结

其实,我只是闲着无聊,才把 Hexo 从 2.8.3 版本升级到 3.1.1 版本的。就我这种入门级使用者的程度来说,并没有感觉到 2.8.3 跟 3.1.1 有什么明显的不同。也许是我用的功能都比较简单吧,不过感觉 3.1.1 版本在生成文件的时候,速度好像比 2.8.3 要快一点,当然,这也可能是我的错觉。

你所看到的这篇文章,就已经是在 Hexo 3.1.1 的基础上发布的了。喜欢追新的同学,勇敢地升级吧!