使用hugo及hugo blox搭建个人博客

使用hugo及hugo blox搭建个人博客

9月 24, 2025·
Yuqi-666
Yuqi-666
· 2 分钟阅读时长
目录

引言

对于能读到这篇文章的人,我默认你有一定技术基础,动手能力,已配置代理。

如果你需要搭建个人博客,我推荐你使用hugo。

hugo是一种静态网站生成器,它能将markdown文件转换成网站页面,这意味着你不需要面对html,css文本,手动管理庞大的资源,而是抛之脑后,更自然的写作。

hugo很快,由go编写,使用多线程。

对于你的网站,你并非只能更改你的内容页面,如果你想get your hands dirty,你想进去控制所有你网站的东西,在网站融入你的风格,你也可以做到,通过改变html,css之类的。

事实上,在一开始你就需要准备一个theme(一个文件包),theme决定了网站样式,提供了hugo构建网站所需的几乎所有部件,包括templatelayout等等,theme本身就是个迷你hugo项目。

对于只想写博客的人,你可以在网上下载现成的theme,对于有定制化需求的人,你可以更改网上的theme或者干脆自己写一个。

因为theme本身就是个迷你hugo项目,你可以直接在上面构建你的网站了,当然你可以将它归纳进hugo项目中的themes文件夹,这暗示着你的网站可以拥有多主题

hugo对content中文档的组织有基本的形式,但是,很多theme有自己的个性,正如前面所说,theme极大扩展hugo创建网站的形式,文档的组织方式也会有增加。

比如我们之后要说的hugo blox,原hugo academic theme,后来持续增长,建立了自己的社区,其特性blox会着重讲解。

因此你需要参考相应theme的教程,组织自己的博客文档,不过基础的组织形式任然适用。

在hugo中,对于所有md文件,都需要加上frontmatter,它是一种YAML格式的元数据,被上下两行---包裹,它用来存储相应md文件的基础数据,比如说标题、日期、作者、标签之类的,它决定了该页面将如何被检索,筛选以及渲染等等。

但在每次创建md文件时加上frontmatter实在是太麻烦了,使用命令hugo new your_blog.md是更好的选择,因为hugo会自动生成带frontmatter的md文件,自动生成什么样的frontmatter是可以定义的,在Archetypes中你可以定义这些原型md文件。 f 在编写md正文时,如果你不想让内容只有纯文字,需要加入一些效果,或者你想嵌入一些图片,bilbili中的视频等,你大可以直接向其中添加html代码,就像iframe那样,它们能被正确渲染出来,这没问题,但如果你想保持md内容的整洁美观,你可以尝试使用shortcodes,将起作用的html代码以html文件形式放入shortcodes文件夹中,并用shortcodes的形式来调用它们,hugo自带部分shortcodes,许多theme也为你准备了一些。

你可以为文章加标签并分类,hugo在frontmatter中提供了tags和categories来归档博客。在Taxonomies了解如何自定义归档分类法。

以上足够一个普通blogger流畅地使用hugo来构建博客了。

如果你希望创造一个独一无二的theme,查看extend

Theme

本质是一套预定义的 模板文件(HTML/CSS/JS)配置示例静态资源,存放在站点根目录的 themes/ 文件夹中。每个主题通过独立的文件夹区分(如 themes/even/、themes/loveit/)。

Hugo 站点默认读取 一个主题 的模板,但通过配置和模板优先级规则,可以实现 “多主题” 的灵活应用

frontmatter

shortcodes

短代码由包裹,名称使用相应html文件名,可以填入参数 例如{{< youtube 2xkNJL4gJ9E >}},2xkNJL4gJ9E为youtube视频id

Archetypes

在 Hugo 中,Archetypes(原型)是用于创建新内容时的模板文件,它们定义了新内容文件的默认元数据(front matter)和初始结构。使用 Archetypes 可以确保网站内容格式的一致性,提高创作效率。

hugo new时会将一级文件夹名称与Archetypes文件夹中md文件名称比对,已确定该使用哪种原型文件

例如,当你要求hugo new posts/tutorials/index.md时,hugo会在archetypes文件夹中寻找名为posts.md的原型文件,若无,则寻找单数形式的名为post.md的原型文件,若无,则使用default.md创建。

hugo blox

Taxonomies

hugo自带tags和categories分类法

例如

tags: 
    - hugo
    - hugo blox
categories:
    - Web


tags: ["hugo","hugo blox"]
categories: ["Web"]

hugo会自动生成路径为/tags/和/categories/的标签展示网页,以及路径为具体分类的路径为/tags/your_tag的list网页。

但如果你希望添加新的分类,比如说按心情分类归档,你就需要在配置文件中配置Taxonomies,配置后需要重新启动hugo server才能生效

对于hugo.yaml文件

taxonomies:
  author: authors
  tag: tags
  category: categories
  mood: moods

对于config.toml文件

[taxonomies]
    tag = "tags"
    category = "categories"
    mood = "moods"

注意:左侧是单数,右侧是复数,tag和category必须要添加

content

hugo将页面分成了single 和 list 两种。

hugo会自动为md文件创建single页面。

自动为content(基于content目录创建的为首页)及其子一级目录创建list页面,以陈列该目录下的所有页面选项。你也可以通过创建_index.md来创建list页面,这个页面会取代基于_index.md所在目录生成的list页面。

所以如果你想让list页面不只是单调的陈列页面选项的话,你应该在相应目录下创建_index.md,并增加自定义元素。

还有一种创建list页面的方式会在hugo blox中讲到。

Extend

为了能让我们自己修改theme有关的文件,我们需要先探索下theme中有什么,以及对应的作用是什么。

以下是theme文件夹中的结构

- theme
    - archetypes
    - assets
        - css
        - dist
        - js
        - media
    - content
    - data
    - images
    - scripts
    - static
    - layouts
        - _default
            - _markup
            - baseof.html
            - graph.html
            - graph.json
            - home.html
            - list.html
            - list.json
            - single.html
            - taxonomy.html
        - notes
            - list.html
        - partials
            - functions
            - head
            - notes
            - page
            - posts
            - svg
            - footer.html
            - graph.html
            - head.html
            - header.html
            - menu.html
            - pagination.html
            - terms.html
        - posts
            - list.html
        - shortcodes
    

这里我们只关注layouts和assets/css,是它们影响了网站的布局和样式

我们可以发现single和list的字眼,结合html可知,他们提供了构建single页面和list页面的布局,因为以它们构建的页面除了页面内容不同外其他都一样,像承载内容的容器,所以叫做template。

template