<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>汉德君的博客</title><link>https://www.handejun.com/</link><description>Recent content on 汉德君的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 15 Nov 2026 11:30:00 +0800</lastBuildDate><atom:link href="https://www.handejun.com/index.xml" rel="self" type="application/rss+xml"/><item><title>用 Hugo + Cloudflare Pages 搭建这个博客</title><link>https://www.handejun.com/posts/hugo-cloudflare-pages/</link><pubDate>Sun, 15 Nov 2026 11:30:00 +0800</pubDate><guid>https://www.handejun.com/posts/hugo-cloudflare-pages/</guid><description>从零到上线：Hugo 的目录结构、PaperMod 主题的常用配置，以及如何用 Cloudflare Pages 免费部署并绑定自己的域名。</description><content:encoded><![CDATA[<p>这个博客由 <a href="https://gohugo.io/">Hugo</a> 生成、托管在 <a href="https://pages.cloudflare.com/">Cloudflare Pages</a>。整站是纯静态文件，构建在云端完成，写作和部署的体验都很轻。</p>
<p>下面是我实际使用的流程，供同样想搭个人站点的朋友参考。</p>
<h2 id="为什么选这套组合">为什么选这套组合</h2>
<ul>
<li><strong>Hugo</strong>：单个二进制文件，构建毫秒级，不需要 Node 生态也能跑；</li>
<li><strong>PaperMod</strong>：简洁、支持深色模式、自带站内搜索与目录，中文排版也不错；</li>
<li><strong>Cloudflare Pages</strong>：连上 Git 仓库后自动构建，免费额度对个人博客绰绰有余，还自带全球 CDN 与 HTTPS。</li>
</ul>
<h2 id="目录结构">目录结构</h2>
<p>初始化之后的站点结构大致是这样：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">blog/
</span></span><span class="line"><span class="cl">├── hugo.toml            # 站点配置
</span></span><span class="line"><span class="cl">├── archetypes/          # 新文章模板
</span></span><span class="line"><span class="cl">├── assets/
</span></span><span class="line"><span class="cl">│   └── css/extended/    # 自定义样式
</span></span><span class="line"><span class="cl">├── content/
</span></span><span class="line"><span class="cl">│   ├── posts/           # 文章
</span></span><span class="line"><span class="cl">│   ├── about.md         # 关于页
</span></span><span class="line"><span class="cl">│   ├── archives.md      # 归档页
</span></span><span class="line"><span class="cl">│   └── search.md        # 搜索页
</span></span><span class="line"><span class="cl">├── static/              # 原样拷贝到站点根目录的文件
</span></span><span class="line"><span class="cl">└── themes/PaperMod/     # 主题（直接放在仓库里，无需 submodule）
</span></span></code></pre></div><h2 id="本地写作与预览">本地写作与预览</h2>
<p>新建一篇文章：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new content posts/my-new-post.md
</span></span></code></pre></div><p>启动本地预览（包含草稿）：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo server -D
</span></span></code></pre></div><p>打开 <code>http://localhost:1313</code> 就能看到效果，改动会实时刷新。</p>
<h2 id="部署到-cloudflare-pages">部署到 Cloudflare Pages</h2>
<h3 id="1-把代码推到-github">1. 把代码推到 GitHub</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git init
</span></span><span class="line"><span class="cl">git add .
</span></span><span class="line"><span class="cl">git commit -m <span class="s2">&#34;chore: init hugo blog&#34;</span>
</span></span><span class="line"><span class="cl">git branch -M main
</span></span><span class="line"><span class="cl">git remote add origin https://github.com/&lt;你的用户名&gt;/&lt;仓库名&gt;.git
</span></span><span class="line"><span class="cl">git push -u origin main
</span></span></code></pre></div><h3 id="2-在-cloudflare-pages-创建项目">2. 在 Cloudflare Pages 创建项目</h3>
<p>进入 Cloudflare 控制台的 <strong>Workers &amp; Pages → Create → Pages → Connect to Git</strong>，选中刚才的仓库，构建配置填：</p>
<table>
	<thead>
			<tr>
					<th>配置项</th>
					<th>值</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Framework preset</td>
					<td>Hugo</td>
			</tr>
			<tr>
					<td>Build command</td>
					<td><code>hugo --gc --minify</code></td>
			</tr>
			<tr>
					<td>Build output directory</td>
					<td><code>public</code></td>
			</tr>
			<tr>
					<td>环境变量</td>
					<td><code>HUGO_VERSION</code> = <code>0.170.0</code></td>
			</tr>
	</tbody>
</table>
<p>保存后，每次 <code>git push</code> 都会自动构建并发布。</p>
<blockquote>
<p>PaperMod 当前版本要求 Hugo ≥ 0.158。<code>HUGO_VERSION</code> 不要留空，否则 Cloudflare 可能使用旧版本导致构建失败。</p>
</blockquote>
<h3 id="3-绑定自己的域名">3. 绑定自己的域名</h3>
<p>在项目的 <strong>Custom domains</strong> 里添加域名，按提示在 DNS 服务商处加一条 <code>CNAME</code> 记录即可。HTTPS 证书会自动签发和续期。</p>
<h3 id="4-修正-baseurl">4. 修正 baseURL</h3>
<p>部署成功后，把 <code>hugo.toml</code> 里的 <code>baseURL</code> 改成正式域名，再推送一次：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="nx">baseURL</span> <span class="p">=</span> <span class="s2">&#34;https://blog.yourdomain.com/&#34;</span>
</span></span></code></pre></div><p>这样 RSS、站点地图和社交卡片的绝对链接才会正确。</p>
<h2 id="命令行部署可选">命令行部署（可选）</h2>
<p>不想连 Git 也可以直接上传构建产物：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo --gc --minify
</span></span><span class="line"><span class="cl">npx wrangler pages deploy public --project-name wang-blog
</span></span></code></pre></div><h2 id="日常写作流程">日常写作流程</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new content posts/xxx.md   <span class="c1"># 1. 新建</span>
</span></span><span class="line"><span class="cl">hugo server -D                  <span class="c1"># 2. 本地预览</span>
</span></span><span class="line"><span class="cl">git add . <span class="o">&amp;&amp;</span> git commit -m <span class="s2">&#34;post: xxx&#34;</span>
</span></span><span class="line"><span class="cl">git push                        <span class="c1"># 3. 自动部署</span>
</span></span></code></pre></div><p>就这三步。工具越简单，越容易坚持下去。</p>
]]></content:encoded></item><item><title>你好，世界</title><link>https://www.handejun.com/posts/hello-world/</link><pubDate>Sun, 15 Nov 2026 10:00:00 +0800</pubDate><guid>https://www.handejun.com/posts/hello-world/</guid><description>给这个刚刚上线的博客写第一篇开篇文章：为什么重新开始写字，以及这里以后会有什么。</description><content:encoded><![CDATA[<p>这是一个刚刚搭建好的博客。</p>
<p>从今天起，我会把那些散落在笔记软件、代码注释和聊天记录里的想法，慢慢搬到这里来。</p>
<h2 id="为什么要写">为什么要写</h2>
<p>写下来的过程，本身就是一次整理。很多时候我以为自己想明白了，直到要把它写成一段别人能读懂的文字，才发现还有不少含混的地方。</p>
<p>这个博客对我有三重意义：</p>
<ol>
<li><strong>存档</strong>：把解决过的问题、踩过的坑记下来，下次不用重新来过；</li>
<li><strong>表达</strong>：把技术之外的观察和感受，放在一个自己完全掌控的地方；</li>
<li><strong>连接</strong>：如果某篇文章恰好帮到了你，那它就是有价值的。</li>
</ol>
<h2 id="这里会有什么">这里会有什么</h2>
<p>大致是三块内容：</p>
<ul>
<li><strong>技术笔记</strong>：前端工程、构建工具、云原生与一些折腾过程的记录；</li>
<li><strong>独立开发</strong>：做小产品时的设计取舍、成本与踩坑；</li>
<li><strong>随笔</strong>：读书、生活，以及一些还没想清楚的问题。</li>
</ul>
<p>更新频率不设目标。写得动就多写一点，写不动就少写一点，但尽量每一篇都对得起你花的时间。</p>
<h2 id="如何订阅">如何订阅</h2>
<p>如果你不想错过更新，可以用任意 RSS 阅读器订阅本站，地址是：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">/index.xml
</span></span></code></pre></div><p>在前面加上你的博客域名即可。也可以直接收藏本页，或者在右上角切换你喜欢的深色 / 浅色主题。</p>
<p>下一篇，我们来聊聊这个博客是用什么搭起来的。</p>
]]></content:encoded></item><item><title>关于</title><link>https://www.handejun.com/about/</link><pubDate>Sun, 15 Nov 2026 09:00:00 +0800</pubDate><guid>https://www.handejun.com/about/</guid><description>关于我和这个博客。</description><content:encoded><![CDATA[<p>你好，我是汉德君。</p>
<p>白天写代码，晚上也偶尔写代码。日常关注前端工程化、Node.js 与云服务，喜欢把重复的事情交给工具，把省下来的时间留给阅读和散步。</p>
<h2 id="关于本站">关于本站</h2>
<p>这里是我想法的一个长期存放处。相比社交平台上的即时表达，我更喜欢博客这种节奏：写的时候慢一点，但留下来可以很久。</p>
<p>站点用 <strong>Hugo</strong> 生成，主题是 <strong>PaperMod</strong>，托管在 <strong>Cloudflare Workers</strong> 上（静态资源 + 全球 CDN）。没有数据库，没有后端，全站都是静态文件，所以打开很快，也不容易坏。</p>
<h2 id="现在">现在</h2>
<ul>
<li>在做一个还没想好名字的小工具</li>
<li>重读《黑客与画家》</li>
<li>学习把想法更快地变成可以运行的东西</li>
</ul>
<h2 id="关于内容">关于内容</h2>
<p>文章按主题分为技术笔记、独立开发与随笔三类，你可以在<a href="/archives/">归档</a>页按时间浏览，也可以使用<a href="/search/">搜索</a>直接找关键词。</p>
<p>如果某篇文章对你有帮助，那是我最开心的事。</p>
]]></content:encoded></item><item><title>写作指南：Markdown 排版速查</title><link>https://www.handejun.com/posts/markdown-guide/</link><pubDate>Sun, 08 Nov 2026 09:20:00 +0800</pubDate><guid>https://www.handejun.com/posts/markdown-guide/</guid><description>本站支持的 Markdown 语法与排版效果速查，写新文章时可以对照这份示例。</description><content:encoded><![CDATA[<p>这篇文章既是写作说明，也是排版样式的预览。需要时可以直接复制格式。</p>
<h2 id="标题层级">标题层级</h2>
<p>文章内标题从 <code>##</code> 开始，右侧会自动生成锚点，正文上方会显示目录。</p>
<h3 id="三级标题">三级标题</h3>
<h4 id="四级标题">四级标题</h4>
<h2 id="强调与链接">强调与链接</h2>
<p><strong>加粗</strong>、<em>斜体</em>、<del>删除线</del>、<code>行内代码</code>，以及<a href="https://gohugo.io/">一个链接</a>。</p>
<h2 id="列表">列表</h2>
<p>无序列表：</p>
<ul>
<li>第一项</li>
<li>第二项
<ul>
<li>嵌套项</li>
<li>另一个嵌套项</li>
</ul>
</li>
<li>第三项</li>
</ul>
<p>有序列表：</p>
<ol>
<li>先做这件事</li>
<li>再做那件事</li>
<li>最后收尾</li>
</ol>
<p>任务列表：</p>
<ul>
<li><input checked="" disabled="" type="checkbox"> 搭建站点</li>
<li><input checked="" disabled="" type="checkbox"> 写第一篇文章</li>
<li><input disabled="" type="checkbox"> 绑定自定义域名</li>
</ul>
<h2 id="引用">引用</h2>
<blockquote>
<p>好的文字，是把复杂的事情说简单，而不是把简单的事情说复杂。</p>
<p>—— 某位记不清名字的作者</p>
</blockquote>
<h2 id="代码">代码</h2>
<p>行内代码写作 <code>`const a = 1`</code>。</p>
<p>代码块支持语法高亮与右上角复制按钮：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kr">export</span> <span class="kr">async</span> <span class="kd">function</span> <span class="nx">getPosts</span><span class="p">(</span><span class="nx">tag</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">res</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="sb">`/index.json`</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">res</span><span class="p">.</span><span class="nx">ok</span><span class="p">)</span> <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s2">&#34;加载失败&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">posts</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">res</span><span class="p">.</span><span class="nx">json</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nx">posts</span><span class="p">.</span><span class="nx">filter</span><span class="p">((</span><span class="nx">p</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="nx">p</span><span class="p">.</span><span class="nx">title</span><span class="p">.</span><span class="nx">includes</span><span class="p">(</span><span class="nx">tag</span><span class="p">));</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new content posts/new-post.md
</span></span><span class="line"><span class="cl">hugo server -D
</span></span></code></pre></div><h2 id="表格">表格</h2>
<table>
	<thead>
			<tr>
					<th>语法</th>
					<th>作用</th>
					<th>示例</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>**文本**</code></td>
					<td>加粗</td>
					<td><strong>重点</strong></td>
			</tr>
			<tr>
					<td><code>*文本*</code></td>
					<td>斜体</td>
					<td><em>提示</em></td>
			</tr>
			<tr>
					<td><code>`代码`</code></td>
					<td>行内代码</td>
					<td><code>hugo</code></td>
			</tr>
			<tr>
					<td><code>[文字](链接)</code></td>
					<td>超链接</td>
					<td><a href="https://gohugo.io/">官网</a></td>
			</tr>
	</tbody>
</table>
<h2 id="图片">图片</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">![<span class="nt">图片说明</span>](<span class="na">/images/example.png &#34;可选标题&#34;</span>)
</span></span></code></pre></div><p>图片建议放在 <code>static/images/</code> 目录下，引用时以 <code>/images/</code> 开头，构建时会原样复制。</p>
<h2 id="分隔线">分隔线</h2>
<hr>
<h2 id="小提示">小提示</h2>
<ul>
<li>每篇文章的 <code>summary</code> 会显示在列表页，写一两句话概括即可；</li>
<li>太长的文章记得多用二级标题，方便生成目录；</li>
<li>草稿保持 <code>draft: true</code>，加 <code>-D</code> 本地预览时才会出现。</li>
</ul>
]]></content:encoded></item></channel></rss>