使用Hugo搭建blog
文章目录
【注意】最后更新于 January 14, 2019,文中内容可能已过时,请谨慎使用。
写在前面
在分别了使用了Hexo、Gridea、Github page等方式部署blog后,我最终选择了Hugo+静态托管
那为什么会选择这种方式,有以下几个原因:
- 对golang有着特殊的偏爱,使我开始关注Hugo
- Hugo快!世界上最快的静态网站生成工具!5秒生成6000个页面!
- 拥有丰富的主题,目前主题数量已经超过 Hexo
- Github page还是会抽风,免费还是会付出代价(而且静态网站托管一点也不贵)
除此之外,想分享下我目前的写作方式:
- 通过Typora编写本地markdown,非常友好
- 将文件夹设置为iCloud同步盘
- 将文件夹软链到Hugo的content目录
通过这种方式可以很好地管理个人的知识储备(谁用谁知道),那废话不多说,本篇文章主要记录Hogo的搭建方式
搭建Hugo
安装 Hugo
macOS
|
|
Windows
|
|
验证安装是否成功
|
|
其他系统请参考官方文档——安装
建站
|
|
添加一个主题
info
本文使用主题为even,各个主题的步骤不一样,请以主题的步骤为准
|
|
开始写作
|
|
编辑你新建的markdown文件。现在,在启用drafts参数的条件下开启Hugo内置的服务器。
|
|
你的网站已经在http://localhost:1313/开启了。
基本使用
这里节选出new
与server
这两个比较常用的命令和-D
,-E
,-F
这三个参数的使用方法。更多的hugo命令可以参考官方文档。
|
|
PS: hugo server 会自动监听你的原始文稿,你在编辑原始.md
文件时的变化都会实时的反映在网站上。如果你不希望启用这个功能你可以使用hugo server --watch=false
命令。
目录结构
在执行完hugo new site
命令后你会得到一个包含以下文件的目录。
|
|
- archetypes: 储存
.md
的模板文件,类似于hexo
的scaffolds
,该文件夹的优先级高于主题下的/archetypes
文件夹 - config.toml: 配置文件
- content: 储存网站的所有内容,类似于
hexo
的source
- data: 储存数据文件供模板调用,类似于
hexo
的source/_data
- layouts: 储存
.html
模板,该文件夹的优先级高于主题下的/layouts
文件夹 - static: 储存图片,css,js等静态文件,该目录下的文件会直接拷贝到
/public
,该文件夹的优先级高于主题下的/static
文件夹 - themes: 储存主题
- public: 执行
hugo
命令后,储存生成的静态文件
配置 Hugo
编辑你的config.toml
文件以配置你的站点。以下节选了部分有趣的参数,完整的配置文件可以参考官方文档。
|
|
除了预设的参数外,你也可以通过下面的方式自定义自己的参数。你可以在模板中获取到自定义的参数,通常情况下你使用的主题都会要求你这么做,具体信息可以阅读相关主题的文档。
|
|
至此,你已经掌握了足够的知识,你只需要从主题列表中挑选一个你喜欢的主题,阅读主题的文档并提供主题所需的信息,便可以开始使用hugo
来写作了。
阅读下面的内容可以帮你更好的了解到hugo
如何管理你的内容,而你又该如何更好的与hugo
协作。
以上是对Getting Started的总结,下面是对Content Management的总结
高级自定义
组织content/文件夹
hugo
会将content/
目录下的结构反映到生成的静态网站中,如下:
|
|
需要注意的是_index.md
是一个比较特殊的文件,如果你只是需要一个about页面,你只需要hugo new about.md
即可。关于_index.md
的相关信息可以参阅官方文档。
Hugo 中的路径分解
|
|
Hugo 中的类型
content/
下的内容可能不仅仅只有文章,还可能有照片甚至其他不同形式的内容。hugo
通过type
属性来标记不同形式的内容,根据不同的type
值,hugo
会选择合适的模板来渲染内容。
默认情况下type
被赋值为section
。例如:使用hugo new posts/new-post.md
命令得到的新文件会被默认为posts
类型。当然你也可以在下文提到的front matter中显式的将文章的type
指定为其他值。
Front Matter
Hugo 支持TOML、YAML、JSON格式的Front Matter。
以下列出一份完整的YAML格式的Front Matter,除了必要的data
与title
参数外,你可以有选择性的使用其他参数。
|
|
模板选择顺序
这是一篇content/posts/
下的文章寻找模板的顺序(此时我们未在文章的Front Matter指定type
与layout
属性):
- /layouts/UNSPECIFIED/UNSPECIFIED.html
- /layouts/posts/UNSPECIFIED.html
- /layouts/UNSPECIFIED/single.html
- /layouts/posts/single.html
- /layouts/_default/single.html
- /themes/
/layouts/UNSPECIFIED/UNSPECIFIED.html - /themes/
/layouts/posts/UNSPECIFIED.html - /themes/
/layouts/UNSPECIFIED/single.html - /themes/
/layouts/posts/single.html - /themes/
/layouts/_default/single.html
如果我们在Front Matter中添加以下代码
|
|
该文章现在的寻找模板顺序为:
- /layouts/review/reviewarticle.html
- /layouts/posts/reviewarticle.html
- /layouts/review/single.html
- /layouts/posts/single.html
- /layouts/_default/single.html
- /themes/
/layouts/review/reviewarticle.html - /themes/
/layouts/posts/reviewarticle.html - /themes/
/layouts/review/single.html - /themes/
/layouts/posts/single.html - /themes/
/layouts/_default/single.html
值得注意的是,/layouts/
目录下模板优先级总是高于 /themes/<THEME>/layouts/
。同理,若根目录下存在与 /themes/
文件夹下同名的文件夹,根目录下的文件优先级总是高于 /themes/
文件夹。
因此,在我们只是需要别人提供的主题做一些小修改时,尤其是对于一些静态资源需要进行覆盖时,将新的文件置于根目录的文件夹下而不是直接对主题进行修改,日后需要更新主题时就无需解决 git 冲突的问题了。
当然,如果是需要直接对 /layouts/
目录下的模板进行修改,还是建议新建一个 git 分支进行更改。
URL管理
正如前文所言,hugo
会将content/
目录下的结构反映到生成的静态网站中,但config.toml
中的permalinks
参数允许你自由更改内容的URL。例如:你想从hexo
迁移到hugo
,你可以将permalinks
定义为下面这种形式以适应之前的URL。
|
|
上面的配置将改变content/post/
文件夹下所有文章的URL。
举个栗子,content/post/sample-entry.md
的URL将从默认的https://example.com/post/sample-entry/
改变为https://example.com/2013/11/sample-entry/
。
所有可用的属性如下:
|
|
内容摘要
Hugo会自动提取文章的前70个字符作为摘要。(注意:该功能在中文环境下需要在config.toml
中添加hasCJKLanguage = true
才能发挥更好的效果。)
当然你也可以在文章内使用以下标志针对文章手动进行摘要提取,在此标志之前出现的内容都会作为摘要使用,且能够保持渲染后的结构而不是纯文字版本。
|
|
分类系统
默认情况下即tags
与categories
,通常来说这已经足够我们使用了,但你也可以在config.toml
文件中添加下面的代码来添加更多的分类。
|
|
Custom Output Formats
hugo
能够输出多种不同格式的内容,这里简单的举个如何同时输出markdown文件的栗子:
在你的config.toml
文件下添加:
|
|
为 MarkDown 新建一个 single.md 模板,写入以下代码,并放置在 /layouts/_default/ 文件夹下
|
|
针对所有内容,在config.toml
文件下添加:
|
|
针对某篇文章,在该文章的Front Matter中添加:
|
|
在模板中的合适位置添加代码链接到你的.md
文件:
|
|
扩展阅读
文章作者 sunhuawei
上次更新 2019-01-14