<?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.huangqixuan.com/tags/hugo/</link><description>Recent content in Hugo on 黄启轩的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 27 Aug 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://www.huangqixuan.com/tags/hugo/index.xml" rel="self" type="application/rss+xml"/><item><title>从毛玻璃到液态玻璃：这个博客是怎么搭起来的</title><link>https://www.huangqixuan.com/p/liquid-glass-blog-build/</link><pubDate>Thu, 27 Aug 2026 00:00:00 +0800</pubDate><guid>https://www.huangqixuan.com/p/liquid-glass-blog-build/</guid><description>&lt;img src="https://www.huangqixuan.com/img/tahoe-light-2560.webp" alt="Featured image of post 从毛玻璃到液态玻璃：这个博客是怎么搭起来的" /&gt;&lt;p&gt;家里已经买了 &lt;code&gt;huangqixuan.com&lt;/code&gt;，一直空着有点可惜。我想拿它写教程，也给自己留一个整理问题的地方。&lt;/p&gt;&#10;&lt;p&gt;我以前用 InfinityFree 的免费空间和 &lt;code&gt;wuaze.com&lt;/code&gt; 子域名建过网站，装过评论区，也折腾过论坛。后来账号因为长期没有使用被暂停并删除，子域名随之报出 DNS 解析错误。网页文件、域名和服务器原来是三件事，免费平台收回空间时，内容和网址都有可能一起失效。&lt;/p&gt;&#10;&lt;p&gt;所以这次我把源文件留在电脑里。以后可以换托管平台，也可以重新解析域名，但文章不能跟着平台消失。&lt;/p&gt;&#10;&lt;h2 id="先决定网站该怎么运行"&gt;&lt;a href="#%e5%85%88%e5%86%b3%e5%ae%9a%e7%bd%91%e7%ab%99%e8%af%a5%e6%80%8e%e4%b9%88%e8%bf%90%e8%a1%8c" class="header-anchor"&gt;&lt;/a&gt;先决定网站该怎么运行&#10;&lt;/h2&gt;&lt;p&gt;动态网站会在访问时查询数据库，再生成页面。WordPress、论坛和带用户系统的网站通常这样运行。登录、发帖、后台管理和复杂评论都更容易实现，代价是要长期维护服务器、数据库、更新和安全设置。&lt;/p&gt;&#10;&lt;p&gt;静态网站会提前把文章生成成 HTML。读者打开网页时，服务器只需发送已经做好的文件。我的教程博客不需要注册和数据库，静态方案省事，也少了一批服务器配置问题。&lt;/p&gt;&#10;&lt;p&gt;我最后选了这条流程：&lt;/p&gt;&#10;&lt;div class="highlight"&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;Markdown 文章&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hugo 生成 HTML&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cloudflare Pages 发布&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;www.huangqixuan.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;GitHub 在这里不是必需的服务器，更像一个保存修改历史并触发自动部署的代码仓库。这个网站现在不依赖 GitHub，我可以直接用 Wrangler 发布到 Cloudflare Pages。以后如果改用 GitHub 自动构建，文章源文件也不用重写。&lt;/p&gt;&#10;&lt;h2 id="为什么用了-hugo-stack"&gt;&lt;a href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e7%94%a8%e4%ba%86-hugo-stack" class="header-anchor"&gt;&lt;/a&gt;为什么用了 Hugo Stack&#10;&lt;/h2&gt;&lt;p&gt;看了几个教程博客之后，我比较喜欢 Hugo Stack 的三栏布局。头像和导航在左边，文章在中间，搜索、分类和标签在右边。桌面上不会显得太空，到了手机上又能收成单栏。&lt;/p&gt;&#10;&lt;p&gt;Hugo 负责把内容生成网页，Stack 提供基础模板。文章仍然是普通的 Markdown，例如：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;文章标题&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2026-08-28&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;建站笔记&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hugo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;正文写在这里。&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样一来，重做网站样式不需要搬文章。哪天不想用 Stack，甚至不想用 Hugo，这些 Markdown 文件照样能打开。&lt;/p&gt;&#10;&lt;h2 id="第一版为什么看起来不像液态玻璃"&gt;&lt;a href="#%e7%ac%ac%e4%b8%80%e7%89%88%e4%b8%ba%e4%bb%80%e4%b9%88%e7%9c%8b%e8%b5%b7%e6%9d%a5%e4%b8%8d%e5%83%8f%e6%b6%b2%e6%80%81%e7%8e%bb%e7%92%83" class="header-anchor"&gt;&lt;/a&gt;第一版为什么看起来不像液态玻璃&#10;&lt;/h2&gt;&lt;p&gt;刚开始时，我只知道自己喜欢苹果的 Liquid Glass 风格，于是先去找现成的 Skill。最早找到的是 &lt;code&gt;apple-design&lt;/code&gt;、&lt;code&gt;frontend-design&lt;/code&gt; 这类设计规范。它们能指导层级、动效和控件组织，却不会凭空产生真实折射。&lt;/p&gt;&#10;&lt;p&gt;第一批 Demo 主要用了这些 CSS：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;rgba&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;12&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;backdrop-filter&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;blur&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;24px&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;saturate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;140&lt;/span&gt;&lt;span class="o"&gt;%);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;border&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;1px&lt;/span&gt; &lt;span class="nt"&gt;solid&lt;/span&gt; &lt;span class="nt"&gt;rgba&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;2&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这几行 CSS 能做出毛玻璃，但不会改变背景像素的位置。玻璃下面的线条没有弯曲，边缘也没有凸透镜感，更像一张半透明塑料片。&lt;/p&gt;&#10;&lt;p&gt;后来我不再只看模糊程度，而是检查这些细节：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;背景细节在玻璃边缘发生位移。&lt;/li&gt;&#10;&lt;li&gt;曲面边缘有连续折射，不只是模糊。&lt;/li&gt;&#10;&lt;li&gt;色差和高光要克制，不能像霓虹描边。&lt;/li&gt;&#10;&lt;li&gt;控件移动时要重新采样它下面的画面。&lt;/li&gt;&#10;&lt;li&gt;内容仍然清楚，按钮和输入框也必须能点。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="把六个原项目放在一起比较"&gt;&lt;a href="#%e6%8a%8a%e5%85%ad%e4%b8%aa%e5%8e%9f%e9%a1%b9%e7%9b%ae%e6%94%be%e5%9c%a8%e4%b8%80%e8%b5%b7%e6%af%94%e8%be%83" class="header-anchor"&gt;&lt;/a&gt;把六个原项目放在一起比较&#10;&lt;/h2&gt;&lt;p&gt;截图很容易骗人。我把六个公开项目下载到本地，保留各自的引擎和默认参数，再做了一页统一入口。对比对象如下：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;项目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;实现路线&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;我最后记住的特点&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://github.com/ybouane/liquidglass" target="_blank" rel="noopener"&#10; &gt;ybouane/liquidglass&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;WebGL Shader&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;折射、色差和光照完整，适合独立按钮和工具栏&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://github.com/archisvaze/liquid-glass" target="_blank" rel="noopener"&#10; &gt;archisvaze/liquid-glass&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SVG + WebGL&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;像一个光学实验台，适合理解厚度、IOR 和边缘宽度&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://github.com/xanaxknight/liquid-glass-css-svg" target="_blank" rel="noopener"&#10; &gt;xanaxknight/liquid-glass-css-svg&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SVG displacement&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;单文件也能做出可见位移，适合研究位移图&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://github.com/el-gladiador/liquid-glass-react" target="_blank" rel="noopener"&#10; &gt;el-gladiador/liquid-glass-react&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;React + WebGL2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;共享 WebGL 上下文，适合 React 项目中的多层玻璃&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://github.com/deepika-builds/liquid-glass" target="_blank" rel="noopener"&#10; &gt;deepika-builds/liquid-glass&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;JavaScript + SVG&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;中心清楚、边缘折射，普通 DOM 内容仍可交互&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a class="link" href="https://github.com/dpawlikowski/liquid-glass" target="_blank" rel="noopener"&#10; &gt;dpawlikowski/liquid-glass&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CSS + SVG&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;不依赖 WebGL，也能组合折射和色差&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;对比之后，我放弃了把所有参数硬凑成一套的做法。一个项目里的 IOR 不能直接换算成另一个项目的 &lt;code&gt;refraction&lt;/code&gt;。大多数时候，原项目调好的默认值比我随手改的数字平衡。&lt;/p&gt;&#10;&lt;p&gt;我最喜欢 1 号的 WebGL 光学和 5 号的可读窗口。5 号 Demo 还带了一套果冻拖动：窗口用 &lt;code&gt;stiffness = 0.12&lt;/code&gt; 和 &lt;code&gt;damping = 0.72&lt;/code&gt; 追赶鼠标，再按速度沿移动方向拉长，最大形变约 8%。折射负责玻璃的样子，拖动负责弹性，它们其实是两套机制。&lt;/p&gt;&#10;&lt;h2 id="把研究结果写成自己的-skill"&gt;&lt;a href="#%e6%8a%8a%e7%a0%94%e7%a9%b6%e7%bb%93%e6%9e%9c%e5%86%99%e6%88%90%e8%87%aa%e5%b7%b1%e7%9a%84-skill" class="header-anchor"&gt;&lt;/a&gt;把研究结果写成自己的 Skill&#10;&lt;/h2&gt;&lt;p&gt;原项目解决了效果，但没有告诉我建站时该把效果放在哪里。我把对比结果整理成 &lt;code&gt;liquid-glass-webgl-jelly&lt;/code&gt; Skill。以后改页面时先看组件是做什么的，不再见到一个框就套一层玻璃。&lt;/p&gt;&#10;&lt;p&gt;这套 Skill 目前遵循这些规则：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;可读窗口、搜索框和信息面板使用边缘位移方案，中心尽量保持清楚。&lt;/li&gt;&#10;&lt;li&gt;独立按钮和紧凑工具栏可以使用 WebGL，但不能在一页堆几十个 Canvas。&lt;/li&gt;&#10;&lt;li&gt;长文章、表格和重复列表不做强折射，阅读比材质展示重要。&lt;/li&gt;&#10;&lt;li&gt;玻璃后面必须有可辨认的壁纸、线条或网格，否则无法确认折射是否真的存在。&lt;/li&gt;&#10;&lt;li&gt;选中、按下和成功状态不能只靠折射，还要有文字、边框或圆点提示。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;prefers-reduced-motion&lt;/code&gt; 和降低透明度设置必须有对应降级。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;有一条规则来自实际遇到的 Bug。早期 Demo 在玻璃导航条里又放了一层透明的 WebGL 选中透镜。它虽然没有填充色，却会重新折射下面的竹林背景。点击标签之后，画面不像胶囊在移动，反而像背景突然换了一块。我删掉第二层折射，只保留清楚的选中状态，问题才消失。&lt;/p&gt;&#10;&lt;p&gt;网站分类卡也用了同一个处理。外层窗口已经有真实折射，内层卡片只保留稳定的浅色衬底、细边框和很小的悬浮变化。再套一层光学滤镜会让画面变脏，也会拖慢滚动。&lt;/p&gt;&#10;&lt;h2 id="把-stack-改成现在的样子"&gt;&lt;a href="#%e6%8a%8a-stack-%e6%94%b9%e6%88%90%e7%8e%b0%e5%9c%a8%e7%9a%84%e6%a0%b7%e5%ad%90" class="header-anchor"&gt;&lt;/a&gt;把 Stack 改成现在的样子&#10;&lt;/h2&gt;&lt;p&gt;我没有直接照搬某个 Demo，而是保留 Stack 的三栏结构，再慢慢替换里面的部件。&lt;/p&gt;&#10;&lt;p&gt;左栏删掉多余介绍，只留下头像、标题、首页、归档、关于和暗色模式。中间还是普通文章流，整张卡片都可以点击。右栏原本有好几个搜索入口，我把它们合并成一个苹果式搜索框，顶部和导航里不再重复放搜索按钮。&lt;/p&gt;&#10;&lt;p&gt;背景用的是 Tahoe 亮色壁纸。原图是 6016 × 6016 的 PNG，直接放进网页太大，我把它压成了 2560 像素的 WebP。线条和颜色变化还在，文件只剩几十 KB。&lt;/p&gt;&#10;&lt;p&gt;网站现在主要使用 SVG 位移滤镜。脚本会为头像区、导航、工具栏、搜索面板、文章卡和正文窗口初始化折射。不支持 SVG &lt;code&gt;backdrop-filter&lt;/code&gt; 的浏览器会退回磨砂效果。研究时准备的 WebGL 和果冻拖动代码仍然留着，但没有一起铺满整页。少几个 Shader，滚动会更稳。&lt;/p&gt;&#10;&lt;p&gt;改样式的过程中，我遇到过这些问题：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;整页套了暗色滤镜，导致亮壁纸变灰，文字也发闷。&lt;/li&gt;&#10;&lt;li&gt;搜索框沿用了暗色主题背景，变成一块纯黑矩形。&lt;/li&gt;&#10;&lt;li&gt;某些文字为了显得精致被缩得太小，在手机上很难看清。&lt;/li&gt;&#10;&lt;li&gt;卡片静止时完全透明，鼠标移上去才突然出现一大块底色。&lt;/li&gt;&#10;&lt;li&gt;移动端背景高度计算错误，页面底部出现黑色区域。&lt;/li&gt;&#10;&lt;li&gt;每次切页都重新加载全部效果，滚动和跳转显得卡。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;我对着截图逐个修正，没有一次性推倒重做。现在卡片从静止到悬浮不会突然换色，正文对比度稳定，手机页面底部也不会再露出黑底。&lt;/p&gt;&#10;&lt;h2 id="发布到-cloudflare-pages"&gt;&lt;a href="#%e5%8f%91%e5%b8%83%e5%88%b0-cloudflare-pages" class="header-anchor"&gt;&lt;/a&gt;发布到 Cloudflare Pages&#10;&lt;/h2&gt;&lt;p&gt;本地写文章时先启动 Hugo：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;hugo&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="n"&gt;-D&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;浏览器会立即显示本地修改。页面确认正常后，再生成发布用的静态文件：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;hugo&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-minify&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-cleanDestinationDir&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-destination&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;cloudflare-dist&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最后用 Wrangler 上传到已有的 Pages 项目：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;npx&lt;/span&gt; &lt;span class="n"&gt;wrangler&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="n"&gt;deploy&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;cloudflare-dist&lt;/span&gt; &lt;span class="p"&gt;`&lt;/span&gt;&#10;&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 class="n"&gt;-project-name&lt;/span&gt; &lt;span class="nb"&gt;huangqixuan-blog&lt;/span&gt; &lt;span class="p"&gt;`&lt;/span&gt;&#10;&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 class="n"&gt;-branch&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cloudflare Pages 会生成一个版本地址，并把生产版本更新到 &lt;code&gt;huangqixuan-blog.pages.dev&lt;/code&gt;。项目已经绑定 &lt;code&gt;www.huangqixuan.com&lt;/code&gt;，Hugo 的 &lt;code&gt;baseURL&lt;/code&gt; 也指向这里。&lt;/p&gt;&#10;&lt;p&gt;现在的发布流程固定为四步：写 Markdown、本地构建、检查视觉和功能、同步到 Cloudflare 并确认生产状态。托管平台保存的是生成后的网页，我需要长期保留的是 Markdown、模板、样式和脚本。&lt;/p&gt;&#10;&lt;h2 id="现在回头看"&gt;&lt;a href="#%e7%8e%b0%e5%9c%a8%e5%9b%9e%e5%a4%b4%e7%9c%8b" class="header-anchor"&gt;&lt;/a&gt;现在回头看&#10;&lt;/h2&gt;&lt;p&gt;这个网站不是选好技术后一次搭成的。我从一个闲置域名开始，先后考虑过免费空间、GitHub Pages、闲置电脑服务器和动态博客，最后才选定 Hugo 与 Cloudflare Pages。&lt;/p&gt;&#10;&lt;p&gt;液态玻璃也绕了不少路。我先做出毛玻璃，发现不对后又下载原项目比较，接着处理玻璃叠加、背景突变、文字对比度和性能问题。最后整理出了一套使用边界。&lt;/p&gt;&#10;&lt;p&gt;这篇文章也算一份备忘录。以后网站哪里改坏了，我可以回来看看当时为什么这样选，不用再从十几个标签页和聊天记录里重新找答案。&lt;/p&gt;&#10;</description></item></channel></rss>