自从Hugo出来后,作为Go语言(golang)的重度用户的重度用户,一直想把自己的博客迁移到Hugo,但是一直没有行动,主要原因在于,我的博客使用的一款主题maupassant非常简洁、响应速度快,但是在Hugo上并没有类似一的主题,再加上从Hexo迁移到Hugo还有好多要修改的,所以一直迟迟没有行动。

Hugo的maupassant主题

前段时间在Github上闲逛,竟然发现了有人基于Hugo制作了maupassant主题,就clone下来看了一下,发现的确实现了maupassant主题的大部分功能,可以用,但是也存在很多问题。

比如:

  1. 不支持最近文章,我现在的Hexo的maupassant主题是支持的。
  2. 分类不支持文章数量的显示。
  3. 不支持标签云
  4. RSS支持,但是不能自动被发现。
  5. 有菜单,但是不是Hugo的菜单功能,灵活性不足。
  6. 不支持友情链接。
  7. 没有文档归档功能。
  8. GA统计分析不支持。
  9. 没有代码高亮。

其他小细节还有很多,这里就不一一列举了,总之,如果按这个模板进行迁移,那么我的博客网站原来的很多功能都没有了,这是我不能接受的。

完善Hugo的maupassant主题

既然很多功能都不支持,而且我又想迁移到Hugo(可以利用go语言的知识,NodeJS不太熟),所以就自定动手参照着我原来博客的功能模板进行完善。原来的maupassant主题作者已经7个多月没有维护了。

因为太忙,断断续续改了好久(一个多月吧),进行了扩展,增加了很多功能,并且用自己的博客做了实验,基本上已经满足我所需的大部分功能,具体效果可以参加 http://www.flysnow.org/

飞雪无情版本的Hugo maupassant 主题开源。

完善了maupassant主题后,我决定进行开源,主要原因有以下几点:

  1. 原maupassant主题有很多缺陷和功能缺失
  2. 原作者最近7个多月没有更新,而且没有详细的使用文档。
  3. 相信还有很多和我一样的人,想用Hugo的这款maupassant主题。
  4. 和更多的朋友一起完善该主题。

基于此,所以我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安装的方式,非常简便。

brew install hugo

Debian and Ubuntu平台下

sudo apt-get install hugo

Windows平台下

Windows下Hugo提供了Chocolatey方式的安装,通过如下命令即可。

choco install hugo -confirm

验证安装

安转完成后,我们打开终端,输入如下命令进行验证是否安装成功

hugo version

如果没问题的话,会输出Hugo的版本号等一些信息。

创建一个站点

hugo new site blog

添加一个主题

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

添加一篇文章

hugo new posts/my-first-post.md

运行查看效果

hugo server -D

然后我们就可以打开浏览器,输入http://localhost:1313查看我们新创建的站点了。

本文为原创文章,转载注明出处,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。

使用新的Hugo maupassant主题

最新版本的Hugo maupassant主题我已经在Github上开源,大家可以clone使用。使用很简单,只需要以下两步即可。

cd <YOUR Bolg Root Dir>
git clone https://github.com/rujews/maupassant-hugo themes/maupassant

然后在Hugo的配置文件里config.toml(yaml,json)中进行如下配置,即可使用。

theme = "maupassant"

记得把你的MD文章放在content/post目录下。

Hugo maupassant 主题配置

Hugo maupassant 主题配置也不难,是否熟悉Hugo都可以快速配置,并生成自己的网站。 我博客的配置如下,大家可以参考。

config.toml

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

[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

[[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

title: "归档"
description: Android资深工程师 ,Go和Java打杂师,《Android Gradle权威指南》作者,Android官方技术文档译者
type: archives

titledescription都可以换成你自己的,但是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语言参数传递是传值还是传引用这篇文章,http://www.flysnow.org/2018/02/24/golang-function-parameters-passed-by-value.html。 只有文章是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

## 保持分类的原始名字(false会做转小写处理)
preserveTaxonomyNames = true

第三个坑就是URL路径

Hugo默认情况下,URL字符串里的字母都会强制转为小写,这对于分类名、标签名是大写的来说,博客迁移后(比如从Hexo到Hugo),原来的链接就失效了,为了解决这个问题,Hugo提供了disablePathToLower配置。

config.toml

## 是否禁止URL Path转小写
disablePathToLower = true

贡献

最后欢迎大家贡献和支持,多star,多PR,多提ISSUE,等着你们。

本文为原创文章,转载注明出处,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。

扫码关注