记录一些实用Hugo写博客的小技巧。

—— 因为如果当时不记录,那么日后肯定不会再记录的!(懒!)

使用Archetype预设模版

在使用 hugo new 命令创建新内容时,你可以指定使用特定的 archetype。Archetype 是 Hugo 中的模板文件,用于预设新内容文件的元数据和结构。默认情况下,Hugo 会使用名为 default.md 的 archetype,但可以创建和指定其他 archetype 来满足不同类型内容的需求。

创建自定义 Archetype

  1. 在 Hugo 站点的根目录中,archetypes 目录用于存放 archetype 文件。

  2. 可以在这个目录下创建新的 archetype 文件。例如,创建一个名为 blog.md 的文件,用于博客帖子:

    archetypes/blog.md
    
  3. 编辑 blog.md 文件,定义你想要预置的内容和 Front Matter,例如:

    ---
    title: "{{ replace .Name "-" " " | title }}"
    date: {{ .Date }}
    draft: true
    tags: []
    ---
    
    在这里写博客内容...
    

使用自定义 Archetype 创建内容

当创建新内容时,可以通过指定 archetype 的名称来使用它。格式如下:

hugo new <路径>/<文件名>.<扩展名> --kind <archetype名称>

或者,如果创建的内容直接位于 archetypes 下的同名目录中,你只需指定路径,Hugo 会自动寻找匹配的 archetype。例如,如果有一个名为 blog.md 的 archetype,就可以这样创建新的博客帖子:

hugo new blog/我的新博客帖子.md

这里,Hugo 会在 archetypes 目录下寻找名为 blog.md 的文件,并使用它作为新内容文件的模板。

如果想显式地使用特定的 archetype 而不依赖于目录结构,可以使用 --kind 参数,像这样:

hugo new posts/我的新博客帖子.md --kind blog

这命令会创建一个新的内容文件 posts/我的新博客帖子.md,并使用 archetypes/blog.md 作为模板。

在文章内链接导航其他文章

在Hugo中创建文章间的超链接,最佳实践是使用相对URL或者Hugo的内置函数来生成URL。这样做的好处是可以保持链接的持久性,即使你的站点URL发生变化,链接也不会断裂。以下是几种在Hugo中链接到另一个本地文章的方法:

1. 使用相对URL

如果知道目标文章的路径,可以直接在Markdown文件中使用相对URL创建链接。例如,如果想从位于 /content/posts/my-first-post.md 的文章链接到 /content/posts/my-second-post.md,可以这样写:

请查看我的[第二篇文章](../my-second-post/)

这里使用的是相对于当前文件的路径。注意,链接的路径部分应该与目标Markdown文件的位置相对应,且通常情况下,不包括文件扩展名.md

2. 使用Hugo的refrelref短代码

Hugo提供了refrelref短代码,这两个短代码可以生成到站点内任何页面的永久链接。这是一种更健壮的链接方法,因为它不依赖于站点的部署路径。这两个短代码的区别在于ref可以用于任何站点(得到绝对路径)页面,而relref仅用于相同语言(得到相对路径)的页面。

假设想链接到位于/content/posts/know/blog-tips.md的文章,可以在任何Markdown文件中这样写:

请查看我的[第二篇文章](两个{< relref "/posts/know/blog-mac-style-code.md" >两个})

实际效果就是这样的:

请查看我的[第二篇文章](/posts/know/blog-mac-style-code/)

或者

请查看我的[第二篇文章](两个{< ref "/posts/know/blog-mac-style-code.md" >两个})

实际效果如下:

请查看我的[第二篇文章](https://ahaknow.com/posts/know/blog-mac-style-code/)

使用refrelref短代码时,需要指定目标文件的路径从content目录的下一个目录开始(也就是hugo new时使用的路径文件名)。

  • 当使用refrelref短代码时,确保路径是从content文件夹开始的相对路径,并且包括文件的扩展名.md
  • 如果站点支持多语言,relref是链接到当前语言下的相对内容,而ref可用于链接到任何语言的内容(因为hugo的不同语言通过url区分)。
  • 使用refrelref的另一个好处是,如果目标链接不存在,Hugo在构建站点时会报错,这有助于你及时发现并修正死链(所以上述使用的是真实存在的文件路径)。