hexo博客迁移到hugo
前段时间了解了一下 hugo,发现了其一个非常突出的优点,那就是快,据说5000篇文章渲染只需要6s的时间。阅读官方文档进一步了解了一下,使用上与hexo模式类似,加上也有非常多的主题,再考虑到后期文章会不断增多,决定放弃hexo使用hugo,毕竟现在90+篇文章,hexo渲染一遍竟然需要8s+,叔能忍,哥不能忍!
本文不是教程,只是记录过程!是的,这就是一水文,xx的流水账!
Hugo
Hugo is a fast and modern static site generator written in Go, and designed to make website creation fun again.
@Hugo What is Hugo
Hugo是Go语言实现的,这可能就是其做到神速的原因。
安装
Hugo不依赖任何运行库和程序,是一个完整独立的运行程序。在macOS下安装很简单,使用homebrew就可以轻松安装:
brew install hugo
安装完成可以查看一下版本号:
hugo version
创建站点
下面可以创建一个新的博客站点,我继续叫smslit:
hugo new site smslit
cd smslit
ls -l
此时会看到出现新的目录 smslit
,进入此目录会看到如下文件结构:
上面文件及目录与hexo博客的对应关系是:
hugo目录 | hexo目录 | 作用 |
---|---|---|
content | source | 存储博文的md文件,hexo中的_post,_draft,各自定义的页面目录其实对应到hugo中的话,都是在content下的 |
config.toml | _config.yaml | 用于配置站点中各项参数 |
themes | themes | 存放主题 |
static | source | hugo中的static目录中存放一些常规静态文件,可以是博客中引用的图片、文件也可以是自添加的任意文件,最终渲染都会放到站点的根目录 |
public | public | 存放渲染后的站点静态文件 |
layout | 无 | 存放自定义的样式布局文件,优先级高于主题中的同名文件,方便修改主题样式 |
主题
我选择了 Even主题,安装很简单:
git clone https://github.com/olOwOlo/hugo-theme-even themes/even
cp themes/even/exampleSite/config.toml .
修改配置文件,这里主要是根据自己需要进行定制和修改:
-
修改菜单栏项与原hexo博客中的一致;
-
修改相应的社交网络链接;
-
使能gitment
…
执行命令,渲染站点并在本地部署:
hugo server
打开链接 127.0.0.1:1313,看到了静态博客的样子,点点各项链接,不正确的相应调整。
新建文章
使用主题一定要看一下主题中的样例站点,文章内容管理方式要与样例一致,所以查看 themes/even/exampleSite/content
中的目录,我是直接cp过来的:
cp -r themes/even/exampleSite/content/* content
删掉post中的文章,然后新建了与配置文件中菜单栏一致的目录,并添加相应的index.md文件:
➜ smslit tree content
content
├── about
│ └── index.md
├── drip
│ └── index.md
└── post
将 about/index.md
(对应菜单项——关于) 和 drip/index.md
(对应菜单项——札记) 内容更改为hexo博客中相应文件的内容,调整内容中的不兼容标签项。
使用命令新建一篇博文:
➜ smslit hugo new post/hello.md
此时,本地部署查看博客,发现菜单项关于和札记正常显示内容,但是没有发现新加的文章。
打开文件,会发现头信息中有一项 draft
值为 true
,说明新建的文件归为草稿,原来是hugo部署和生成静态站点文件的时候会根据md文件中的 draft
值来判断是否渲染,没有此项内容认为是 false
,也就是添加渲染,所以这里可以将 draft
项的值改为 false
或者直接删掉,再次尝试部署,可以在 127.0.0.1:1313中看到新加的文章。
迁移博文
迁移博文主要面临两个问题:
- md文件头信息(Front Matter)格式有区别;
- hexo和hugo的部分标签语言不兼容,比如hexo的
{% image %}
;
文章头信息
在hugo中文件的头信息有三种格式可选:yaml、toml和json。这个可以在 config.toml
中配置,为了迁移方便,所以选择了hexo中博文使用的yaml格式。总结博文不兼容点如下:
- 文件名,在hugo中不用包含日期;
- 不包含layout项;
- hugo中date项的格式是:2018-07-05T00:00:00+08:00
- hugo中tags和categories的格式有两种,不兼容hexo中多标签时只使用
,
分隔的方式;
根据上述四项的不同,编写了python脚本批量处理文章:hexo2hugo.py
标签语言不兼容
这个问题,用python脚本批处理的话比较不值得了,比较使用特殊的hexo标签的地方并不是很多,所以,可以使用grep命令帮助寻找包含 {%
的md文件,然后打开相应文件修改为hugo下对应格式就可以了。
其它问题
上面两个问题解决后,将文章放到 content/post
下,本地部署查看,所有的文章均正常出现了,但是会发现一个问题是,文章列表中的预览内容并没有按照 <!--more-->
标记分界显示,后来发现原来是标记的格式不对,文章中的标记为 <!-- more -->
,more 两边多了两个空格,hugo只识别不带空格的 more 标记,为此编写了python脚本format_more_tag.py进行批处理,解决!
发布
我的博客是部署到coding的,国内访问比较快,与部署到github无异,不过比较好的是,coding中的pages服务可以强制使用https
,😁!hugo没有像hexo一样专门的部署命令,所以我编写了一个部署脚本,在使用脚本前需要做以下工作:
- 将静态文件的仓库clone到本地,比如到
~/Downloads
目录,仓库目录最好是设置成隐藏目录,目录名加个.即可; - 进入
~/Downloads/.smslit
中,删掉所有除了.git的文件,将hugo博客中public目录下所有文件cp到~/Downloads/.smslit
下,提交一下修改,并推到coding中,等到coding的pages服务完成渲染,访问https://www.smslit.top ,已经成为本地hugo渲染的样子,说明已经打通通道; - 在目录
/usr/local/bin
下创建脚本文件deploy
,内容如下:#!/bin/bash # ~/smslit目录为hugo站点目录 cd ~/smslit # ~/Downloads/.hogo目录为本地静态文件的git仓库 cp -r ~/Downloads/.hugo/.git public echo 'Generating Web Pages...' hugo cd public git add . git commit -m 'update pages' echo 'Deploy the pages' git push rm -rf ~/Downloads/.hugo/ mkdir ~/Downloads/.hugo mv ~/smslit/public/.git ~/Downloads/.hugo/ echo 'Done, have a good time!'
- 为脚本
/usr/local/bin/deploy
添加执行权限:chmod +x /usr/local/bin/deploy
完成上述工作,重新开启一个终端,执行命令就可以自动渲染并提交静态文件修改了:
deploy
可以看到,静态站点文件生成速度很快,原来hexo需要8s+,现在只需要300+ms:
| ZH-CN
+------------------+-------+
Pages | 254
Paginator pages | 13
Non-page files | 0
Static files | 264
Processed images | 0
Aliases | 73
Sitemaps | 1
Cleaned | 0
Total in 376 ms