迁移博客的碎碎念
本文主要是一些把博客迁移到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标签中直接粘贴进去。虽然不优雅,但可行。
换了博客主题写作心情也会变好。