<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hugo on 苏三有春的博客</title><link>https://www.lyrical-wander.cn/tags/hugo/</link><description>Recent content in Hugo on 苏三有春的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Lyrical Wander</copyright><lastBuildDate>Fri, 29 May 2026 12:00:00 +0800</lastBuildDate><atom:link href="https://www.lyrical-wander.cn/tags/hugo/index.xml" rel="self" type="application/rss+xml"/><item><title>Hugo 博客维护踩坑记：主题迁移、暗色模式与 SCSS 优先级</title><link>https://www.lyrical-wander.cn/p/hugo-%E5%8D%9A%E5%AE%A2%E7%BB%B4%E6%8A%A4%E8%B8%A9%E5%9D%91%E8%AE%B0%E4%B8%BB%E9%A2%98%E8%BF%81%E7%A7%BB%E6%9A%97%E8%89%B2%E6%A8%A1%E5%BC%8F%E4%B8%8E-scss-%E4%BC%98%E5%85%88%E7%BA%A7/</link><pubDate>Fri, 29 May 2026 12:00:00 +0800</pubDate><guid>https://www.lyrical-wander.cn/p/hugo-%E5%8D%9A%E5%AE%A2%E7%BB%B4%E6%8A%A4%E8%B8%A9%E5%9D%91%E8%AE%B0%E4%B8%BB%E9%A2%98%E8%BF%81%E7%A7%BB%E6%9A%97%E8%89%B2%E6%A8%A1%E5%BC%8F%E4%B8%8E-scss-%E4%BC%98%E5%85%88%E7%BA%A7/</guid><description>&lt;img src="https://www.lyrical-wander.cn/stackImage.png" alt="Featured image of post Hugo 博客维护踩坑记：主题迁移、暗色模式与 SCSS 优先级" /&gt;&lt;h2 id="为什么要用-git-submodule"&gt;为什么要用 Git Submodule&lt;/h2&gt;
&lt;p&gt;最初搭建博客时，我把 Hugo Theme Stack 的所有文件直接复制、提交到了博客仓库里。主题文件成百上千，和自己的文章、配置搅在一起。这带来几个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;无法追踪上游更新&lt;/strong&gt;：上游修了 bug、加了新功能，我完全不知道，知道了也没法一键合并。唯一的选择是手动下载新版本的主题，重新覆盖，然后祈祷不要把自己改过的地方冲掉。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;提交历史被污染&lt;/strong&gt;：几百个主题文件的增删改和自己的博客文章混在同一个 git log 里，一眼看去完全分不清哪些是自己的创作、哪些是第三方代码。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;仓库臃肿&lt;/strong&gt;：主题文件占了大头，真正属于我的内容反而被淹没了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="git-submodule-是什么"&gt;Git Submodule 是什么&lt;/h2&gt;
&lt;p&gt;Git Submodule 允许一个 Git 仓库（主仓库）&lt;strong&gt;引用&lt;/strong&gt;另一个 Git 仓库（子模块）的&lt;strong&gt;特定 commit&lt;/strong&gt;，而不是把它的文件复制过来。&lt;/p&gt;
&lt;p&gt;可以这样理解：不用 submodule 时，你等于把别人的房子拆了，砖头一块块搬到自己院子里重新盖；用了 submodule，你只是在自家院子里插了一块路牌，写着「去那边那个房子」。&lt;/p&gt;
&lt;p&gt;关键特性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主仓库只记录一个指针（子模块的 repo URL + commit hash），不存储子模块的实际文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git clone&lt;/code&gt; 主仓库后，子模块目录是空的，需要 &lt;code&gt;git submodule update --init&lt;/code&gt; 才会把子模块拉下来&lt;/li&gt;
&lt;li&gt;子模块有自己独立的 &lt;code&gt;.git&lt;/code&gt; 目录、独立的 commit 历史、独立的 remote&lt;/li&gt;
&lt;li&gt;子模块的版本是&lt;strong&gt;精确锁定&lt;/strong&gt;的——它指向一个具体 commit，不会自动更新&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="submodule-的实际优势"&gt;Submodule 的实际优势&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;直接嵌入主题&lt;/th&gt;
&lt;th&gt;Git Submodule&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;查看改动&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git diff&lt;/code&gt; 里几百个主题文件混在一起&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git diff&lt;/code&gt; 只显示指针 commit 的变化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;更新主题&lt;/td&gt;
&lt;td&gt;手动下载、覆盖、手动合并&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cd themes/xxx &amp;amp;&amp;amp; git pull&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;上游修复&lt;/td&gt;
&lt;td&gt;不知道、合并痛苦&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git fetch origin &amp;amp;&amp;amp; git merge&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;回滚&lt;/td&gt;
&lt;td&gt;混在博客历史中难以定位&lt;/td&gt;
&lt;td&gt;主仓库 &lt;code&gt;git checkout&lt;/code&gt; 一个旧 commit 即可恢复当时引用的主题版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;定制&lt;/td&gt;
&lt;td&gt;直接改文件&lt;/td&gt;
&lt;td&gt;通过 Hugo 的覆盖机制（&lt;code&gt;layouts/&lt;/code&gt;、&lt;code&gt;assets/&lt;/code&gt;、&lt;code&gt;static/&lt;/code&gt;）在不碰主题源码的前提下定制&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;基于以上原因，我决定把主题改成 git submodule 管理。但过程并不顺利，踩了四个坑，逐一记录。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="第一步把嵌入的主题改成-submodule--fork"&gt;第一步：把嵌入的主题改成 submodule + fork&lt;/h2&gt;
&lt;p&gt;思路很清晰：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fork 一份 &lt;code&gt;CaiJimmy/hugo-theme-stack&lt;/code&gt; 到自己的 GitHub&lt;/li&gt;
&lt;li&gt;在 fork 里改好暗色模式的颜色（背景 &lt;code&gt;#000000&lt;/code&gt;，卡片 &lt;code&gt;#121317&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;博客主仓库 &lt;code&gt;git rm -r themes/hugo-theme-stack&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git submodule add&lt;/code&gt; 指向上一步的 fork&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这一步还算顺利。具体改动见 commit &lt;code&gt;52b389e&lt;/code&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="坑一submodule-指向的是-fork-的-v4x和博客用的-v39x-不兼容"&gt;坑一：submodule 指向的是 fork 的 v4.x，和博客用的 v3.9.x 不兼容&lt;/h2&gt;
&lt;p&gt;我的 fork 克隆的是上游 &lt;code&gt;main&lt;/code&gt; 分支（v4.x），但博客一直用的是 v3.9.x。两个版本的目录结构、CSS 变量、模板写法都不一样。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;现象&lt;/strong&gt;：切 submodule 后，暗色模式的颜色没了，整体布局也有些差异。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最初的想法&lt;/strong&gt;：切回 fork 的 v3.9.2 tag。但 fork 是直接从上游 fork 的 &lt;code&gt;main&lt;/code&gt;，在 GitHub 上没法直接指定 fork 时的分支。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最终方案&lt;/strong&gt;：submodule 直接指向上游 &lt;code&gt;CaiJimmy/hugo-theme-stack&lt;/code&gt; 的 v3.9.2 tag，不要再维护一个 fork 了。主题定制统一通过 Hugo 的覆盖机制实现，不动主题源码。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 切换 submodule&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git checkout -- .gitmodules
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git submodule add --force https://github.com/CaiJimmy/hugo-theme-stack.git themes/hugo-theme-stack
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; themes/hugo-theme-stack &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git checkout v3.9.2 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ../..
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;--force&lt;/code&gt; 是因为 &lt;code&gt;.git/modules/themes/&lt;/code&gt; 里还缓存着旧的 git 目录。不加 &lt;code&gt;--force&lt;/code&gt; 会报 &lt;code&gt;A git directory for 'themes/hugo-theme-stack' is found locally&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="坑二hugo-v01522-废弃-api直接编译失败"&gt;坑二：Hugo v0.152.2 废弃 API，直接编译失败&lt;/h2&gt;
&lt;p&gt;GitHub Actions 用的 Hugo 版本是 &lt;code&gt;0.152.2&lt;/code&gt;。在这个版本中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;resources.ToCSS&lt;/code&gt; → 已移除，需用 &lt;code&gt;css.Sass&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.Site.LastChange&lt;/code&gt; → 已移除，需用 &lt;code&gt;.Site.Lastmod&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但 hugo-theme-stack v3.9.2 仍然在用这些废弃 API。Workflow 直接报错退出。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决方案&lt;/strong&gt;：Hugo 布局文件的优先级是「项目 &lt;code&gt;layouts/&lt;/code&gt; &amp;gt; 主题 &lt;code&gt;layouts/&lt;/code&gt;」。因此直接照搬主题中的三个文件到项目目录，修改一行即可：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文件&lt;/th&gt;
&lt;th&gt;修改&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;layouts/partials/head/style.html&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;resources.ToCSS&lt;/code&gt; → &lt;code&gt;css.Sass&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;layouts/partials/comments/provider/disqusjs.html&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;resources.ToCSS&lt;/code&gt; → &lt;code&gt;css.Sass&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;layouts/partials/head/opengraph/provider/base.html&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.Site.LastChange&lt;/code&gt; → &lt;code&gt;.Site.Lastmod&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;-{{ $style := $sass | resources.ToCSS | minify | resources.Fingerprint &amp;#34;sha256&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;&lt;/span&gt;&lt;span class="gi"&gt;+{{ $style := $sass | css.Sass | minify | resources.Fingerprint &amp;#34;sha256&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;-{{- if not .Site.LastChange.IsZero -}}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;&lt;/span&gt;&lt;span class="gi"&gt;+{{- if not .Site.Lastmod.IsZero -}}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="坑三assetsscsscustomscss-暗色模式覆盖不生效重点"&gt;坑三：&lt;code&gt;assets/scss/custom.scss&lt;/code&gt; 暗色模式覆盖不生效（重点）&lt;/h2&gt;
&lt;p&gt;编译通过了，但暗色模式还是默认的 &lt;code&gt;#303030&lt;/code&gt; / &lt;code&gt;#424242&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;排查过程&lt;/strong&gt;：我在项目根目录创建了 &lt;code&gt;assets/scss/custom.scss&lt;/code&gt;，写入：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-scheme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dark&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--body-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#000000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--card-background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#121317&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;主题的 &lt;code&gt;assets/scss/style.scss&lt;/code&gt; 末尾有 &lt;code&gt;@import &amp;quot;custom.scss&amp;quot;&lt;/code&gt;，理论上 Hugo 应该优先加载项目的 &lt;code&gt;assets/scss/custom.scss&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;但实际情况是&lt;/strong&gt;：主题的 &lt;code&gt;assets/scss/&lt;/code&gt; 目录下也有一个 &lt;code&gt;custom.scss&lt;/code&gt;，虽然它只是一个空注释：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* Place your custom SCSS in HUGO_SITE_FOLDER/assets/scss/custom.scss */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Hugo 的 SCSS &lt;code&gt;@import&lt;/code&gt; 解析器在遇到 &lt;code&gt;@import &amp;quot;custom.scss&amp;quot;&lt;/code&gt; 时，会&lt;strong&gt;先在当前文件所在目录查找&lt;/strong&gt;（即主题的 &lt;code&gt;assets/scss/&lt;/code&gt;）。它找到了主题的那个空文件，加载了它，就停了。项目里的同名文件根本没被看到。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;踩坑记录&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;❌ 尝试覆盖 &lt;code&gt;style.scss&lt;/code&gt;，把 &lt;code&gt;@import &amp;quot;custom.scss&amp;quot;&lt;/code&gt; 改成 &lt;code&gt;@import &amp;quot;site-custom.scss&amp;quot;&lt;/code&gt;，然后创建 &lt;code&gt;site-custom.scss&lt;/code&gt;。这个方案&lt;strong&gt;理论上可行&lt;/strong&gt;，但实际操作中因为之前的编译产物一致（都是默认色），GitHub Actions 的部署环节 &lt;code&gt;peaceiris/actions-gh-pages&lt;/code&gt; 检测到 &lt;code&gt;nothing to commit&lt;/code&gt;，跳过了部署，导致没有生效。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;❌ 尝试直接修改 submodule 内的主题文件 —— 本地能跑，但 CI 重新 clone 子模块后又还原了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✅ &lt;strong&gt;最终方案&lt;/strong&gt;：直接覆盖 &lt;code&gt;assets/scss/variables.scss&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hugo 的资源查找（&lt;code&gt;resources.Get&lt;/code&gt;）逻辑和 SCSS &lt;code&gt;@import&lt;/code&gt; 解析逻辑不同。&lt;code&gt;resources.Get&lt;/code&gt; 会优先使用项目中的文件而不是主题中的。所以只要创建一个包含暗色模式的 &lt;code&gt;assets/scss/variables.scss&lt;/code&gt;，Hugo 就会用它代替主题的版本。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 拷贝主题的 variables.scss 到项目&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp themes/hugo-theme-stack/assets/scss/variables.scss assets/scss/variables.scss
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 修改暗色模式部分&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# --body-background: #303030 → #000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# --card-background: #424242 → #121317&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这个方案不仅解决了 &lt;code&gt;@import&lt;/code&gt; 优先级问题，而且改动集中在一个文件里，不依赖 &lt;code&gt;custom.scss&lt;/code&gt; 的加载顺序。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="坑四部署日志显示成功但-githubio-仓库没更新"&gt;坑四：部署日志显示成功，但 &lt;code&gt;.github.io&lt;/code&gt; 仓库没更新&lt;/h2&gt;
&lt;p&gt;Workflow 日志里 &lt;code&gt;Deploy Web&lt;/code&gt; 步骤显示：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git commit -m auto deploy ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;On branch main
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nothing to commit, working tree clean
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[INFO] skip commit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;原因&lt;/strong&gt;：&lt;code&gt;peaceiris/actions-gh-pages@v4&lt;/code&gt; 默认行为会在目标仓库克隆一份，&lt;code&gt;git rm -r *&lt;/code&gt; 清空，再 &lt;code&gt;cp&lt;/code&gt; 新的构建产物进去，然后 commit。如果新的产物和上次完全一致（文件树 hash 相同），git 会认为没有变化，跳过 commit。&lt;/p&gt;
&lt;p&gt;这发生在上一个坑的排查中 — 我们的 &lt;code&gt;style.scss&lt;/code&gt; 覆盖方案编译出来的结果和默认主题一样（都是 &lt;code&gt;#303030&lt;/code&gt; / &lt;code&gt;#424242&lt;/code&gt;），所以部署被跳过了。&lt;/p&gt;
&lt;p&gt;只要修复真正生效（编译出不同的 CSS），部署就会重新触发。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="总结hugo-主题定制的优先级规则"&gt;总结：Hugo 主题定制的优先级规则&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;Hugo 的行为&lt;/th&gt;
&lt;th&gt;推荐做法&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;布局覆盖&lt;/strong&gt; (layouts/)&lt;/td&gt;
&lt;td&gt;项目的 &lt;code&gt;layouts/&lt;/code&gt; 优先于主题&lt;/td&gt;
&lt;td&gt;直接复制主题文件到项目，修改&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SCSS @import&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;先从导入文件的目录查找&lt;/td&gt;
&lt;td&gt;不要和主题的同名文件冲突，避免用通用的名字如 &lt;code&gt;custom.scss&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;resources.Get + SCSS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;项目的 &lt;code&gt;assets/&lt;/code&gt; 优先于主题&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;覆盖 &lt;code&gt;variables.scss&lt;/code&gt; 是最可靠的&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;静态资源&lt;/strong&gt; (static/)&lt;/td&gt;
&lt;td&gt;项目的 &lt;code&gt;static/&lt;/code&gt; 覆盖主题同名文件&lt;/td&gt;
&lt;td&gt;放 &lt;code&gt;static/img/avatar.png&lt;/code&gt; 等&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;关键教训&lt;/strong&gt;：在 Hugo 中给主题改样式，特别是改 CSS 变量，最稳妥的方式永远是 &lt;strong&gt;直接在项目中放置 &lt;code&gt;assets/scss/variables.scss&lt;/code&gt;&lt;/strong&gt;，而不是依赖 &lt;code&gt;custom.scss&lt;/code&gt; 的 &lt;code&gt;@import&lt;/code&gt; 机制。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="附本次改动总览"&gt;附：本次改动总览&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ff7709a switch theme submodule to upstream v3.9.2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;d25696a move particles.js to head/custom.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;54a32e0 add dark mode overrides via custom.scss ← 没生效
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;60fd094 fix deprecated Hugo APIs (ToCSS, LastChange)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a03c80b override style.scss → site-custom.scss ← 编译成功但部署被跳过
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;84e15c4 trigger rebuild ← 同上
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6c366ed fix: override variables.scss directly ← 最终生效 ✅
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item></channel></rss>