为什么 Hugo 在不同的操作系统上生成不同的分类相关的 HTML?

问题描述 投票:0回答:1

我出于自己的目的修改了HugoAnanke主题,修改内容在这里

关键的变化是我想要一个可链接标签的列表(主题已经放在每个帖子的底部)也出现在

/tags/
页面的顶部(并且对类别和其他分类法也执行相同的操作) 。此外,我希望在每个标签气泡中也显示适用帖子的数量。

所以,我将这段代码放入模板中

/layouts/_default/terms.html

 {{ $taxonomyObject := cond (eq .Data.Plural "tags") .Site.Taxonomies.tags .Site.Taxonomies.categories }}
<div class="measure-wide-l center f4 lh-copy nested-copy-line-height nested-links {{ $.Param "text_color" | default "mid-gray" }}">
  {{ .Content }}
  <ul class="pa0">
    {{ range .Data.Pages }}
     <li class="list di">
       <a href="{{  .Page.RelPermalink }}" class="link f5 grow no-underline br-pill ba ph3 pv2 mb2 dib black sans-serif">
         {{- .Page.Title -}} <span class="f4"><strong> {{ $taxonomyObject.Count .Page.Title }}</strong></span>
       </a>
     </li>
    {{ end }}
  </ul>
</div>

(我可以稍后添加对除标签和类别之外的分类法的检查)

我还修改了

exampleSite
类别以添加一些标签和类别。然而,与大多数示例和教程所显示的不同,我没有将它们全部设为单个单词小写值(如果我这样做,我就不会注意到这个问题)。

以下是 macOS 上的结果(Sonoma 14.4.1、Intel、go v1.22.1、Hugo v0.124.1):

这是 Hugo 在 Linux 上从同一源生成的内容(Alpine 3.18、x86_64、go v1.20.11、Hugo v0.111.3)

如您所见,差异在于:

  • 在 Linux 上,分类标题的显示方式与源代码中的标题完全相同——仅当源代码大写时才大写。 MacOS 应用“书名”大写规则(除
    a
    the
    and
    等以外的单词均大写)。
  • 如果分类法大写或标题中有空格,则 Linux 上的计数为 0。

我认为后者是一个比前者更严重的问题,但如果所有行为在操作系统之间保持一致那就太好了。

我发现的解决方案的一部分涉及修改模板条目,如下所示:

<li class="list di">
       {{ $normalizedTerm := replace (lower .Page.Title) " " "-" }}
       <a href="{{  .Page.RelPermalink }}" class="link f5 grow no-underline br-pill ba ph3 pv2 mb2 dib black sans-serif">
         {{- .Page.Title -}} <span class="f4"><strong> {{ $taxonomyObject.Count $normalizedTerm }}</strong></span>
       </a>
     </li>

但是,如果我只是更改为这样,在 macOS 上,计数将不正确。

那么为什么会发生这种情况,无论我在什么操作系统上进行操作,如何获得一致的站点生成呢?我在 Hugo 文档中没有找到确定模板内操作系统类型的方法(有些相关的功能是herehere。即使这是可能的,它也不是一个理想的解决方案:

  • 这可能是由于 Hugo 版本不同造成的
  • 这可能特定于我正在使用的 Linux 发行版/版本

虽然一个明显的区别是 Linux 文件系统区分大小写,但这并不是那么简单,因为在两个系统上 Hugo 生成的所有文件都是小写的,没有空格。 Hugo 实际上会从相同的代码生成不同的 HTML,具体取决于操作系统。

所以,两个问题是:

  1. 为什么?
  2. 我需要更改什么才能获得相同的 HTML?
linux macos hugo static-site-generation hugo-theme
1个回答
0
投票

我通过将模板编辑为以下内容找到了部分有效(但可靠)的解决方案:

{{ $taxonomyObject := cond (eq .Data.Plural "tags") .Site.Taxonomies.tags .Site.Taxonomies.categories }}
{{ $replaceFlag := getenv "HUGO_TAXONOMY_REPLACE_FLAG"  }}
<div class="measure-wide-l center f4 lh-copy nested-copy-line-height nested-links {{ $.Param "text_color" | default "mid-gray" }}">
  {{ .Content }}
  <ul class="pa0">
    {{ range .Data.Pages }}
     <li class="list di">
       {{ $transformedTerm := replace (lower .Page.Title) " " "-" }}
       {{ $normalizedTerm := cond (ne $replaceFlag "") $transformedTerm .Page.Title }}
       <a href="{{  .Page.RelPermalink }}" class="link f5 grow no-underline br-pill ba ph3 pv2 mb2 dib black sans-serif">
         {{- .Page.Title -}} <span class="f4"><strong> {{ $taxonomyObject.Count $normalizedTerm }}</strong></span>
       </a>
     </li>
    {{ end }}
  </ul>

虽然没有直接的方法来访问 Hugo 构建中的系统类型,但可以在调用

hugo -D
之前适当地设置该变量。这不会改变不同的大小写,但正如我在问题中所说,这是一个比错误计数更小的问题——这可以解决。

但这是通过反复试验找到的解决方案。我仍然对为什么会出现这种差异感兴趣。

© www.soinside.com 2019 - 2024. All rights reserved.