介绍
距离上次 切换到 Hugo 主题 Even - 狂飙 已经过去两年了,使用的 Even 主题也没有什么大问题,一些想要的改动自己也就定制了。
但是最近突然发现 Even 主题的 diff 代码语法高亮有问题,全是一个颜色,无法区分出哪变化的部分。另外 Even 新版本不再使用 webpack 工具链而是改用 Hugo Pipes 来修改样式表,所以后续修改样式表更容易了。
重要: 本主题用到了 Hugo Pipes 功能。如需修改 assets
目录下的文件,请安装 extended 版。
原则
博客最重要的不是主题,而是内容。必须保证内容链接的有效性,因此要检查升级后生成的目录结构与升级前是否完全一致。
一定要负责任,放到互联网上的东西,没人希望链接突然失效,因此我们应该尽可能地保证自己的东西都是稳定可用的。
环境
版本变化
版本变化 |
旧版本 |
新版本 |
Hugo |
v0.54.0 |
v0.84.0 |
Even 主题 |
v4.0.0 |
v4.1.0 |
结果比较方法
在开始前先明确验证输出内容是否相同的方法。
构建概要比较
比较新旧版本 Hugo 构建之后的概要输出,比较结果看看是否有差异。
目录结构比较
使用 Beyond Compare 比较新旧版本的目录结构,在 规则
中取消勾选 比较文件大小
与 比较时间戳
,这样可以只比较文件名。
过程
Hugo
Hugo 下载指定版本,hugo_0.84.0_macOS-64bit.tar.gz
,暂时解压到临时目录使用,不替换现有安装的版本。
Even 主题
主题是使用子仓库的形式管理,因此可以将改动放到单独的网站分支上。
1
2
3
4
|
$ git fetch upstream
$ git branch --move networm.me networm.me_hugo-v0.54.0_even-v4.0.0
$ git checkout -b networm.me_hugo-v0.84.0_even-v4.1.0
$ git rebase v4.1.0
|
构建网站
更新到新版本需要将自定义的改动变基到最新版本,在处理冲突后同步使用新版本 Hugo 构建,查看是否存在异常。
由于自定义修改了主页显示方式为存档,使用了旧版本的语法,因此构建时报错:
1
2
3
4
|
$ ~/Downloads/hugo_0.84.0_macOS-64bit/hugo server
Start building sites …
Built in 281 ms
Error: Error building site: failed to render pages: render of "home" failed: "~/networm.me/themes/even/layouts/index.html:2:29": execute of template failed: template: index.html:2:29: executing "content" at <(where .Site.RegularPages "Type" "post") .Site.RegularPages.ByDate.Reverse>: can't give argument to non-function where .Site.RegularPages "Type" "post"
|
修复方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
diff --git a/layouts/index.html b/layouts/index.html
index de0dba7..f20c32c 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -1,10 +1,10 @@
{{- define "content" }}
-{{- $paginator := .Paginate ((where .Site.RegularPages "Type" "post") .Site.RegularPages.ByDate.Reverse) .Site.Params.archivePaginate }}
+{{- $paginator := .Paginate ((where .Site.RegularPages "Type" "post").ByDate.Reverse) .Site.Params.archivePaginate }}
<section id="archive" class="archive">
{{- if and (not $paginator.HasPrev) .Site.Params.showArchiveCount }}
<div class="archive-title">
<span class="archive-post-counter">
- {{ T "archiveCounter" (len .Site.RegularPages) }}
+ {{ T "archiveCounter" (len (where .Site.RegularPages "Type" "post")) }}
</span>
</div>
{{- end -}}
|
alias 修复
在进行结果比较时,发现新版本 Hugo 会将 alias 生成到 url 相同的路径下,例如
就会将 find-merge-conflict-files.html
生成到 /2014/05/07/
目录下。
修复起来也很简单,只需要在首部增加 /
表示绝对路径即可。
1
2
3
4
5
|
---
aliases:
- - find-merge-conflict-files.html
+ - /find-merge-conflict-files.html
url: /2014/05/07/find-merge-conflict-files/
|
在 Visual Studio Code 中使用正则表达式进行批量文件查找替换:aliases:\n - ([^/])
替换为 aliases:\n - /$1
,这里注意查找时使用了 [^/]
来防止替换到以 /
开头的正确 alias。
编译警告
1
|
WARN 2021/06/12 22:34:09 Page.URL is deprecated and will be removed in a future release. Use .Permalink or .RelPermalink. If what you want is the front matter URL value, use .Params.url
|
全局搜索 .URL
然后一点一点替换,找到产生问题的地方。经过实际查找替换,只有两个文件存在问题。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
diff --git a/layouts/index.html b/layouts/index.html
index f20c32c..f1f242f 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -23,7 +23,7 @@
{{ $element.Date.Format "2006-01-02 Mon" }}
</span>
<span class="archive-post-title">
- <a href="{{ $element.URL }}" class="archive-post-link">
+ <a href="{{ $element.Permalink }}" class="archive-post-link">
{{ .Title }}
</a>
</span>
diff --git a/layouts/share/single.html b/layouts/share/single.html
index fcda0dd..54e95e9 100644
--- a/layouts/share/single.html
+++ b/layouts/share/single.html
@@ -53,14 +53,14 @@
<!-- Post Pagination -->
<nav class="post-nav">
{{ with .NextInSection -}}
- <a class="prev" href="{{ .URL }}">
+ <a class="prev" href="{{ .Permalink }}">
<i class="iconfont icon-left"></i>
<span class="prev-text nav-default">{{ .Title }}</span>
<span class="prev-text nav-mobile">{{ T "prevPost" }}</span>
</a>
{{- end }}
{{ with .PrevInSection -}}
- <a class="next" href="{{ .URL }}">
+ <a class="next" href="{{ .Permalink }}">
<span class="next-text nav-default">{{ .Title }}</span>
<span class="next-text nav-mobile">{{ T "nextPost" }}</span>
<i class="iconfont icon-right"></i>
|
结果比较
上面的每一步都需要进行结果比较,尽可能早地发现问题。
所有提交处理后,再次进行比较,目录结构没有差异,但是概要显示页面数量减少了 2 页。既然最终生成的目录结构完全一致,就不去查找为什么页面数量差 2 页了。
结果
打开现在的博客的源代码,即可以看到如下字样,证明升级成功:
1
|
<meta name="generator" content="Hugo 0.84.0 with theme even">
|
已经将修改结果提交到 Fork 后的仓库 networm.me_hugo-v0.84.0_even-v4.1.0
默认分支中:
之前的旧版本放在 networm.me_hugo-v0.54.0_even-v4.0.0
分支中。