自从Hugo出来后,作为Go语言(golang)的重度用户的重度用户,一直想把自己的博客迁移到Hugo,但是一直没有行动,主要原因在于,我的博客使用的一款主题maupassant非常简洁、响应速度快,但是在Hugo上并没有类似一的主题,再加上从Hexo迁移到Hugo还有好多要修改的,所以一直迟迟没有行动。
Hugo的maupassant主题
前段时间在Github上闲逛,竟然发现了有人基于Hugo制作了maupassant主题,就clone下来看了一下,发现的确实现了maupassant主题的大部分功能,可以用,但是也存在很多问题。
比如:
- 不支持最近文章,我现在的Hexo的maupassant主题是支持的。
- 分类不支持文章数量的显示。
- 不支持标签云
- RSS支持,但是不能自动被发现。
- 有菜单,但是不是Hugo的菜单功能,灵活性不足。
- 不支持友情链接。
- 没有文档归档功能。
- GA统计分析不支持。
- 没有代码高亮。
其他小细节还有很多,这里就不一一列举了,总之,如果按这个模板进行迁移,那么我的博客网站原来的很多功能都没有了,这是我不能接受的。
完善Hugo的maupassant主题
既然很多功能都不支持,而且我又想迁移到Hugo(可以利用go语言的知识,NodeJS不太熟),所以就自定动手参照着我原来博客的功能模板进行完善。原来的maupassant主题作者已经7个多月没有维护了。
因为太忙,断断续续改了好久(一个多月吧),进行了扩展,增加了很多功能,并且用自己的博客做了实验,基本上已经满足我所需的大部分功能,具体效果可以参加 http://www.flysnow.org/ 。
飞雪无情版本的Hugo maupassant 主题开源。
完善了maupassant主题后,我决定进行开源,主要原因有以下几点:
- 原maupassant主题有很多缺陷和功能缺失
- 原作者最近7个多月没有更新,而且没有详细的使用文档。
- 相信还有很多和我一样的人,想用Hugo的这款maupassant主题。
- 和更多的朋友一起完善该主题。
基于此,所以我fork了原来的maupassant主题,把我修改的提交了上去,形成了新的flysnow hugo maupassant theme。
新的Hugo maupassant 主题主要有以下特性支持
- 最近发表的文章支持,显示最近的10篇
- 分类支持,并且可以显示分类内的文章数量
- 标签云支持
- 一键回到页面顶部
- RSS支持,并且可以自动发现RSS
- 自定义菜单支持,不限个数,自定义排序
- 自定义友情链接支持
- 支持文章按年份日期进行归档
- 支持GA分析统计
- Sitemap站点地图
- 支持关键字SEO优化
- 代码高亮
- Google站内搜索
当然还有很多特性不支持,比如百度分析、文章阅读数统计,评论等,后面会继续完善。
什么是Hugo
引用一下Hugo官网的描述
The world’s fastest framework for building websites. Hugo是一个非常受欢迎的、开源的静态网站生成工具,和Hexo类似。 它速度快,扩展性强。
更多的关于Hugo的介绍,请参考Hugo的官网 https://gohugo.io/ 。
Hugo的安装和使用。
Hugo比Hexo速度更快,而且不用依赖一大堆东西,一个二进制文件就可以搞定。
Github下载
我们可以直接从Github Release页面下载对应的二进制文件,然后把它放在你的PATH目录里即可使用。这个支持任何平台,根据自己的平台选择相应的二进制包即可。
Mac平台下
Mac下Hugo提供了homebrew安装的方式,非常简便。
代码语言:javascript复制brew install hugo
Debian and Ubuntu平台下
代码语言:javascript复制sudo apt-get install hugo
Windows平台下
Windows下Hugo提供了Chocolatey方式的安装,通过如下命令即可。
代码语言:javascript复制choco install hugo -confirm
验证安装
安转完成后,我们打开终端,输入如下命令进行验证是否安装成功
代码语言:javascript复制hugo version
如果没问题的话,会输出Hugo的版本号等一些信息。
创建一个站点
代码语言:javascript复制hugo new site blog
添加一个主题
代码语言:javascript复制cd blog;
git init;
git submodule add https://github.com/budparr/gohugo-theme-ananke.git themes/ananke;
# Edit your config.toml configuration file
# and add the Ananke theme.
echo 'theme = "ananke"' >> config.toml
添加一篇文章
代码语言:javascript复制hugo new posts/my-first-post.md
运行查看效果
代码语言:javascript复制hugo server -D
然后我们就可以打开浏览器,输入http://localhost:1313
查看我们新创建的站点了。
本文为原创文章,转载注明出处,欢迎扫码关注公众号
flysnow_org
或者网站http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。
使用新的Hugo maupassant主题
最新版本的Hugo maupassant主题我已经在Github上开源,大家可以clone使用。使用很简单,只需要以下两步即可。
代码语言:javascript复制cd <YOUR Bolg Root Dir>
git clone https://github.com/rujews/maupassant-hugo themes/maupassant
然后在Hugo的配置文件里config.toml(yaml,json)中进行如下配置,即可使用。
代码语言:javascript复制theme = "maupassant"
记得把你的MD文章放在content/post目录下。
Hugo maupassant 主题配置
Hugo maupassant 主题配置也不难,是否熟悉Hugo都可以快速配置,并生成自己的网站。 我博客的配置如下,大家可以参考。
config.toml
代码语言:javascript复制baseURL = "http://www.flysnow.org"
languageCode = "zh-CN"
title = "飞雪无情的博客"
theme = "maupassant"
[author]
name = "飞雪无情"
[params]
author = "飞雪无情"
subtitle = "专注于Android、Java、Go语言(golang)、移动互联网、项目管理、软件架构"
keywords = "golang,go语言,go语言笔记,飞雪无情,java,android,博客,项目管理,python,软件架构,公众号,小程序"
description = "专注于IT互联网,包括但不限于Go语言(golang)、Java、Android、Python、项目管理、抖音分析、软件架构等"
Hugo maupassant 自定义菜单
原作者的菜单是基于Content Type实现的,扩展性很差。Hugo本身有菜单的支持,扩展性更好,所以我改为基于Hugo原生菜单的方式实现,可以无限级扩展、支持菜单排序。
config.toml
代码语言:javascript复制[menu]
[[menu.main]]
identifier = "books"
name = "新书"
url = "/books/"
weight = 2
[[menu.main]]
identifier = "archives"
name = "归档"
url = "/archives/"
weight = 3
[[menu.main]]
identifier = "about"
name = "关于"
url = "/about/"
weight = 4
identifier
标志符必须是唯一的,不能重复;weight
用于排序,值越小越靠前。
Hugo maupassant 友情链接
友情链接的实现也是遵循Hugo原生的方式,参考配置如下:
config.toml
代码语言:javascript复制[[params.links]]
title = "Android Gradle权威指南"
name = "Android Gradle权威指南"
url = "http://yuedu.baidu.com/ebook/14a722970740be1e640e9a3e"
[[params.links]]
title = "常用开发工具CDN镜像"
name = "常用开发工具CDN镜像"
url = "http://mirrors.flysnow.org/"
params.links
是一个数组,所以我们可以自定义很多友情链接。name
表示显示的链接文本,title
表示鼠标悬停在友情链接时,显示的文本。
Hugo maupassant 文章归档支持
Hugo默认是不支持生成归档文件的,需要自己实现。新主题已经实现了文章归档,只需要在新建content/archives/index.md
文件,文件内容为:
content/archives/index.md
代码语言:javascript复制title: "归档"
description: Android资深工程师 ,Go和Java打杂师,《Android Gradle权威指南》作者,Android官方技术文档译者
type: archives
title
和description
都可以换成你自己的,但是type
必须是archives
。
content/archives/index.md
表示在content/archives/
目录下的index.md
文件
这样Hugo就会自动生成/archives/index.html
归档页面,通过类似http://www.flysnow.org/archives/
的URL进行访问,目前的归档是按照年份进行归档,后面可以扩展更多的归档方式。
其他静态文件
有些不需要我们转化的静态文件,比如robots.txt
、我们上传的附件等,这些不需要Hugo进行处理,可以直接放在static
目录下,Hugo会原封不动的拷贝。
从Hexo到Hugo踩的坑
从Hexo到Hugo踩了一些坑,这里主要介绍一些主要的。
第一个坑就是URL链接。
对于从Hexo迁移到Hugo来说,比较重要的就是保持URL链接的一致性,这样已经被搜索索引,其他文章引用的文章才可以继续被打开,否则就会出现404错误。
我以前使用Hexo的博客,文章链接是使用的permalink
设置优化的URL,比如:
permalink: :year/:month/:day/:title.html
这样我们博客文章全部都是这样年月日 标题 html后缀的格式,比如Go语言参数传递是传值还是传引用这篇文章,https://cloud.tencent.com/developer/article/1196792。 只有文章是html后缀的格式,分类、标签等聚合页是目录Path的格式,如:http://www.flysnow.org/categories/Golang/
。
在新的Hugo系统中,我也想这么做,但是Hugo的permalink
是不能配置html后缀的,即可你配置了,也只会生成如下的URL/year/month/day/title.html/
还是一个目录,无法以.html结尾。
我查了下Hugo的文档,发现有个配置可以解决,这就是在config.toml
里设置uglyurls = true
。 这样的确解决了以.html
结尾的问题,但是又引出来另外一个问题,就是分类、标签等也是以.html
结尾了,变成了http://www.flysnow.org/categories/Golang.html
,查了很多文档,鱼和熊掌不可兼得(有知道的朋友一定要告诉我,多谢)。
最终我采用了指定文章URL的方式,不用uglyurls = true
配置了。在每篇文章里的Front Matter
加上
url: /2018/02/24/golang-function-parameters-passed-by-value.html
强制指定文章的URL,这样就解决了从Hexo到Hugo迁移带来的问题。
第二个坑是分类名称
我们在写文章的时候,会给文章进行分类,比如Golang,但是默认情况下,Hugo会把这个Golang转为小写,这就给我们一直用原始字符的造成困扰,为了解决这个问题,Hugo提供了preserveTaxonomyNames
配置,把它设置为true
就可以了保持原来分类的名字了。
config.toml
代码语言:javascript复制## 保持分类的原始名字(false会做转小写处理)
preserveTaxonomyNames = true
第三个坑就是URL路径
Hugo默认情况下,URL字符串里的字母都会强制转为小写,这对于分类名、标签名是大写的来说,博客迁移后(比如从Hexo到Hugo),原来的链接就失效了,为了解决这个问题,Hugo提供了disablePathToLower
配置。
config.toml
代码语言:javascript复制## 是否禁止URL Path转小写
disablePathToLower = true
贡献
最后欢迎大家贡献和支持,多star,多PR,多提ISSUE,等着你们。
本文为原创文章,转载注明出处,欢迎扫码关注公众号
flysnow_org
或者网站http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。