迁移博客的碎碎念
本文主要是一些把博客迁移到hexo过程中发生的各种技术问题。
前言
由于之前的博客太丑了,阅读体验极差,响应式布局像个傻逼一样(电脑横屏的文章布局和手机一样,字贼大,将浏览器窗口侧边收紧后阅读体验反而变好),我决定迁移博客。
迁移准备
博客全部在github上,所以只要找到一个博客系统,能够兼容之前的markdown就行了。如果没有兼容,至少改动不需要太多。由于在github page上,那么存在以下几个备选方案:
- Hugo:拿GO写的静态站点生成器
 - Hexo:基于Node.js的博客框架
 - jekyll:基于ruby的静态博客网站生成器
 
以上就是几个备选方案,或许存在我不知道的备选方案(比如自己写?),所以我没有考虑。
Why hexo?
没什么原因,因为hugo没听说过,jekyll忘了怎么拼写(虽然之前用的就是jekyll,但我还是懒得部署本地ruby环境)。
选择完hexo之后,就可以看看博客主题,毕竟我不会前端,还是拿别人写好的比较好。
Hexo官网主题提供了许多可供选择的主题,可以直接点进仓库看,可以自己部署,但我更喜欢直接fork别人仓库后改文章代码,网页配置之类的东西,毕竟简单(懒)。
我用的是icarus,仓库地址在这里,注意这个地址是site分支,也就是实际网站源码的分支。下载完源码之后记得git切分支。
环境准备
Node.js和Hexo的安装就不多说了,官网很详细。同时在clone完上面仓库,切换到site分支后,进到对应文件夹,执行以下命令安装依赖。
1  | npm install  | 
他会根据package.json文件去安装依赖。虽然有些依赖可能已经过时,但能用就行。这个过程可能很长,记得换源。(我自己都没换)
安装完成后,执行以下命令启动服务器:
1  | hexo server  | 
也可以简写为hexo s,这时候访问localhost:4000就应该可以访问到页面了。
小插曲
安装完hexo后,电脑的ms-setting没有了。这个的直接后果是个性化,显示设置这些右键的设置选项打不开,会报错说找不到。电脑的开始界面点不开,搜索界面搜索到的软件全部打不开,但是桌面都很正常,应用软件也都打得开。
最初我怀疑是path被搞丢了的问题,但是其实不是,但还是记录以下,这里是path搞丢了的解决方案:
Win+R进入到运行,输入regedit,进入到注册表编辑器- 进入到
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment,找到path,复制。 右键点击我的电脑,属性,高级系统设置,环境变量,去里面找到path,进行比对。不同就恢复以下。
这可能是一个path丢失的解决方案,但并没有解决我的问题。于是随便搜了一下。我执行了以下步骤,但具体哪一个步骤真正解决了问题,我也不知道:
Win+X,可以用管理员模式点开powershell,这个应该不依赖ms-setting。- 执行
sfc /scannow,扫描并修复损坏或丢失系统文件。 - 执行
shutdown -r重启。 
虽然最后解决了问题,但再次说一下,我也不知道以上哪个步骤真正解决了问题,仅供参考。
部署和配置
回到主题,完成运行之后,我们需要更改配置,来供自己使用。更改配置在_config.yml里面,具体选项有着具体的文档解释,反正可以运行看效果,所以可以随便试试。本博客采用的主题除了这一个yaml文件外,还有=_config.post.tml和_config.icarus.yml文件,这些主要看文档怎么写和自己多试试。
插曲2
在本地运行调试之后,我发现个严重的问题,本地访问需要20s。这个问题挺好排查的,因为本地不可能这么慢。点开F12看调试框,可以看到有个叫fontawsome的css文件需要联网获得,并且failed。这样就存在了访问慢的问题。
解决方法是在配置文件中改CDN,具体参考yaml文档的解释。
部署
在yaml中设置type: git,repo: 远程git仓库,branch: 分支就行,记得设置到master分支才有效。
由于我们安装了别人的依赖,所以不需要再安装deploy。在设置完成后,执行以下:
1  | hexo deploy  | 
等待即可。不出以外的话应该会成功。出意外的话github会给你发邮件。
配置
这里简单介绍一些配置。
toc可以开启目录。需要提前配置。
categories设置分类。tags设置文章tag。
mathjax我自己的使用方法是在文章前面head里面加cdn来设置的。也有模板提供的解决方法,具体查模板文档就行。
题外话 algolia
algolia是个前端搜索插件,好用是好用,但部署过程有些复杂,导致我收了不知道多少个github邮件说失败。这里简单介绍一下。
实际解决方案:
先说实际解决方案——用别人的api key。自己申请的key由于硬编码到——config.yml中,因此会被爬虫爬到(三分钟就被警告了),并且会被发邮件警告。所以用别人的key是最好的。
就我自己的话,是用的别人的api key,抄的别人的github action来用的,好处是省心,坏处是有些缺德。
理论解决方案:
首先注册algolia账号。它的官网访问速度很迷,所以慢慢等。注册之后需要填公司,瞎填就行。
新建一个index,自己命名一下,然后在左边找到api key栏目,新建一个带各种权限的api key。
在yaml中设置各种选项,如下:
1  | algolia:  | 
这里api key就是刚才申请的,其他的照抄即可。
除此之外,还要设置环境变量,如下所示:
1  | export HEXO_ALGOLIA_INDEXING_KEY=apiKey  | 
不是很懂它的两次apiKey,由于我们硬编码到yaml中了,所以必定会被爬虫爬到。所以还是用别人的。
在完成环境变量后,安装hexo-algolia插件,如下:
1  | npm install hexo-algolia --save  | 
然后运行即可。
注意:我没试过理论方法,毕竟被github发了一万个邮件,所以不保证正确性。觉得懒的可以直接抄github action就行。
总结和其他
整个过程花了我两天还是一天,总之比预想要快,因为blog的一些标签都是兼容的,这就很好办,没有过多的迁移成本。
但也存在一些问题,比如我之前的blog的格式就存在很多问题,显示上不好看,但无伤大雅。一些硬编码的链接也出现了问题,比如目录错误之类的,有时间慢慢解决吧。(也就是不解决了)
同时还有个不知道是bug还是feature的东西,在渲染markdown table的时候渲染失败,两个减号会被渲染成unicode 2013字符。暂时解决方法是通过typora的开发者界面复制html代码,然后在raw标签中直接粘贴进去。虽然不优雅,但可行。
换了博客主题写作心情也会变好。