<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Saul的个人博客</title><description>记录学习与成长</description><link>https://saul-blog.pages.dev/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.16.8</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年10月19日 21:26:38</lastBuildDate><item><title>搭建实录：从零到上线踩过的坑</title><link>https://saul-blog.pages.dev/posts/build-log/</link><guid isPermaLink="true">https://saul-blog.pages.dev/posts/build-log/</guid><description>从 Git 代理到部署平台选型，再到主题切换，从零到上线踩过的坑全记录。</description><pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;坑一：Git 代理导致 clone 失败&lt;a href=&quot;#坑一git-代理导致-clone-失败&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;现象&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clone&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://gitee.com/xxx/yyy.git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;fatal:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;access&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;...&apos;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Failed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;connect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gitee.com:443&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;over&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;proxy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;127.0.0.1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2036&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ms&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;定位&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;代理残留在了 Git 全局配置里，但本地那个端口根本没服务在跑：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--global&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https.proxy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# http://127.0.0.1:10808&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;netstat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ano&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10808&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 无输出 = 端口没有监听&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;解决&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--global&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--unset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http.proxy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--global&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--unset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https.proxy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;坑二：Gitee Pages 下架&lt;a href=&quot;#坑二gitee-pages-下架&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;网上教程清一色教你”仓库 → 服务 → Gitee Pages → 启动”，但 2025 年 10 月 11 日这个功能已经下架（官方 issue #ID1EVM 确认）。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;替代方案实测&lt;/strong&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;th&gt;原因&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Gitee Pages&lt;/td&gt;&lt;td&gt;不可用&lt;/td&gt;&lt;td&gt;服务已下架&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;腾讯云 EdgeOne&lt;/td&gt;&lt;td&gt;不可用&lt;/td&gt;&lt;td&gt;国内加速区域默认域名仅 3 小时有效，直连 401&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Vercel&lt;/td&gt;&lt;td&gt;不可用&lt;/td&gt;&lt;td&gt;中国 IP 新账号触发风控，人工审核周期不可控&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Pages&lt;/td&gt;&lt;td&gt;可用&lt;/td&gt;&lt;td&gt;免费、免备案，&lt;code&gt;xxx.pages.dev&lt;/code&gt; 永久公开&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;坑三：Hexo 改完主题没生效&lt;a href=&quot;#坑三hexo-改完主题没生效&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Hexo 有缓存。改完配置必须：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clean&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;hexo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;server&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;少了 &lt;code&gt;clean&lt;/code&gt;，一半的改动都不会生效。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;坑四：换主题迁移（Hexo → Firefly）&lt;a href=&quot;#坑四换主题迁移hexo--firefly&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;用 Hexo + Butterfly 跑了三天，还是换成了 &lt;a href=&quot;https://github.com/CuteLeaf/Firefly&quot; target=&quot;_blank&quot;&gt;Firefly&lt;/a&gt;（Astro 主题）。迁移本身不难，但有三个坑：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. Node 版本要够&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Firefly 要求 Node ≥ 22.23，本机的 22.22 差一个小版本。engines 字段默认只警告不拦截，构建照样能过，但遇到诡异报错先核对版本再排查。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. pnpm 是硬依赖&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Firefly 用 pnpm 管依赖，&lt;code&gt;package.json&lt;/code&gt; 里有 &lt;code&gt;preinstall: npx only-allow pnpm&lt;/code&gt;，用 npm 装会被直接拒绝。更坑的是本机的 corepack 坏了（路径拼接错乱），最后绕过 pnpm 直接用 &lt;code&gt;node_modules/.bin&lt;/code&gt; 里的本地二进制跑构建链。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. front-matter 字段名不一样&lt;/strong&gt;&lt;/p&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Hexo&lt;/th&gt;&lt;th&gt;Firefly&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;date&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;published&lt;/code&gt;&lt;/td&gt;&lt;td&gt;发布日期&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;categories&lt;/code&gt;（数组）&lt;/td&gt;&lt;td&gt;&lt;code&gt;category&lt;/code&gt;（单个字符串）&lt;/td&gt;&lt;td&gt;只能填一个分类&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cover&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;image&lt;/code&gt;&lt;/td&gt;&lt;td&gt;封面图&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;sticky&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;pinned: true&lt;/code&gt;&lt;/td&gt;&lt;td&gt;置顶&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;字段名写错不会报错，文章会直接”消失”——因为校验不过被丢弃了。迁移后先看文章总数对不对。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;心得&lt;a href=&quot;#心得&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;遇到问题先看&lt;strong&gt;报错信息本身&lt;/strong&gt;，它通常已经把原因说清楚了。别急着搜，先读懂。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>零成本给博客加评论系统：Twikoo+Netlify+MongoDB实录</title><link>https://saul-blog.pages.dev/posts/twikoo-comment-system/</link><guid isPermaLink="true">https://saul-blog.pages.dev/posts/twikoo-comment-system/</guid><description>评论区一分钱不花：Twikoo后端部署到Netlify，MongoDB Atlas免费库存数据，三个隐蔽坑全记录。</description><pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;博客上线没几天，评论区还空着。这篇记录我给博客加评论系统的全过程，总花费0元，总耗时一个多小时，其中大半时间在排错。三个坑一个比一个隐蔽，写下来给后来的人省时间。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;先说结论&lt;a href=&quot;#先说结论&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&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;th&gt;花费&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;评论后端程序&lt;/td&gt;&lt;td&gt;Twikoo 2.0.15&lt;/td&gt;&lt;td&gt;开源免费&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;后端托管&lt;/td&gt;&lt;td&gt;Netlify Functions&lt;/td&gt;&lt;td&gt;免费层&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;数据库&lt;/td&gt;&lt;td&gt;MongoDB Atlas M0&lt;/td&gt;&lt;td&gt;免费层&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;为什么是Twikoo&lt;a href=&quot;#为什么是twikoo&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我的博客托管在Cloudflare Pages上，纯静态，没地方存评论。加评论系统必然要引入一个常年在线的后端加一个数据库，所以选型其实是在选”后端跑在哪”。&lt;/p&gt;&lt;p&gt;候选挨个过一遍：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;giscus&lt;/strong&gt;：评论者必须用GitHub账号登录。我的读者是同学和朋友，基本没有GitHub账号，评论区会变成摆设。淘汰。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;waline&lt;/strong&gt;：功能最全，但后端免费托管的位置全撞墙。Vercel默认域名大陆基本连不上，也没有Cloudflare Workers官方适配。淘汰。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;腾讯云CloudBase&lt;/strong&gt;：国内速度天花板，但免费体验版无法在HTTP网关里配置跨域域名，这一步绕不过去；个人版19.9元/月起。学生党暂时退场。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HuggingFace&lt;/strong&gt;：以前是免费方案里的明星，2026年7月起免费账号已经不能创建Docker Space，要PRO月付9美元。这条路刚被堵死。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare Workers&lt;/strong&gt;：官方适配+D1免费数据库+我正好有CF账号，差点就成了。卡在域名上：部署后的地址是&lt;code&gt;twikoo.xxx.workers.dev&lt;/code&gt;，这个后缀在大陆被DNS污染，直接超时。没有自定义域名就没法用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EdgeOne Makers&lt;/strong&gt;：必须绑定自定义域名，默认域名链接只有3小时有效期。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;最后剩Netlify：Twikoo官方部署文档里评级四星，免费方案里最高。免费额度每月12.5万次请求、100小时函数时长，大陆访问速度在免费平台里算好的。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;架构一句话&lt;a href=&quot;#架构一句话&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Twikoo负责接收和审核评论，Netlify负责让它跑起来，MongoDB Atlas负责存。前端JS从CDN加载，评论数据走后端进数据库。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;部署过程&lt;a href=&quot;#部署过程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. 注册两个账号&lt;a href=&quot;#1-注册两个账号&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Netlify&lt;/strong&gt;：邮箱注册，验证邮箱，然后在User settings → Applications里生成一个Personal access token。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;MongoDB Atlas&lt;/strong&gt;：邮箱注册，建集群时选M0 FREE（永久免费层，512MB存储），Region选东京（离国内近）。过程中要建一个数据库用户，密码自己设好记牢；网络访问后面会讲到，这里先埋个伏笔。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 部署后端&lt;a href=&quot;#2-部署后端&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;官方模板是配合GitHub fork用的，我用Netlify命令行从本地直接推，连fork都省了：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clone&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--depth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://github.com/twikoojs/twikoo-netlify.git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twikoo-netlify&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;在根目录建一个&lt;code&gt;netlify.toml&lt;/code&gt;：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;netlify/functions&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;node_bundler&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;esbuild&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;设置环境变量后一条命令部署：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;netlify&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;env:set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MONGODB_URI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;mongodb+srv://用户:密码@cluster0.xxxx.mongodb.net/?retryWrites=true&amp;amp;w=majority&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;netlify&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;env:set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NODE_VERSION&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;24&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;netlify&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--dir&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;netlify/functions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;打开分配的地址，看到”Twikoo 云函数运行正常”就算成功。&lt;/p&gt;&lt;p&gt;一个容易漏的点：&lt;strong&gt;Netlify的envId必须带上&lt;code&gt;/.netlify/functions/twikoo&lt;/code&gt;后缀&lt;/strong&gt;，跟Vercel那种直接给域名的不一样。博客前端配置envId时少了这段后缀，请求会404。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;坑一：整个站点401&lt;a href=&quot;#坑一整个站点401&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;部署完打开，等来的不是”运行正常”，是Netlify的登录跳转页。所有路径全部401，连首页都是。查API看站点状态，claimed是true，一度以为是令牌权限问题。&lt;/p&gt;&lt;p&gt;真实原因：&lt;strong&gt;新账号的站点可见性&lt;/strong&gt;。进Netlify控制台 → Site configuration → Access and security → Site visibility，改成Public，立刻恢复。&lt;/p&gt;&lt;p&gt;顺带一提，注册后的验证邮件最好第一时间点掉，新账号功能受限有一半是因为邮箱没验证。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;坑二：504 Inactivity Timeout&lt;a href=&quot;#坑二504-inactivity-timeout&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;登录墙解决了，再打开变成504，函数被调用但一直挂起直到超时，函数日志里一片空白。&lt;/p&gt;&lt;p&gt;这次排了好一会儿。后来顺着调用链想：函数启动后第一件事就是连数据库。回Atlas控制台一看，Network Access里只有一条记录，我自己的IP。而Netlify服务器的出口IP每次都不一样，永远进不了白名单。&lt;/p&gt;&lt;p&gt;解决：Network Access → ADD IP ADDRESS → &lt;strong&gt;Allow access from anywhere&lt;/strong&gt;（0.0.0.0/0）。&lt;/p&gt;&lt;p&gt;有人会担心安全。M0免费库有独立的数据库用户名密码，白名单只是第一道门，个人博客的流量级这么用是社区标准做法。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;坑三：手改连接串改出双斜杠&lt;a href=&quot;#坑三手改连接串改出双斜杠&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Atlas复制的连接串自带&lt;code&gt;&amp;lt;db_password&amp;gt;&lt;/code&gt;占位符，替换密码时手一抖，主机名前多打了一个斜杠，变成&lt;code&gt;mongodb+srv://user:pass@//cluster0...&lt;/code&gt;，驱动直接报错。建议整串复制，只动占位符那一段。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;顺便科普：DNS污染&lt;a href=&quot;#顺便科普dns污染&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;为什么你的pages.dev博客能打开，workers.dev就不行？DNS污染指的是国内查询某些域名的IP时会得到一个假答案，于是永远连不上。pages.dev这个后缀没被污染，workers.dev被污染了。同属Cloudflare，两种命运。这也是选型里”有没有自定义域名”变成关键变量的原因。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;最后花了多少钱&lt;a href=&quot;#最后花了多少钱&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&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;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Twikoo&lt;/td&gt;&lt;td&gt;0（开源）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Netlify Functions&lt;/td&gt;&lt;td&gt;0（每月12.5万次请求额度）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MongoDB Atlas M0&lt;/td&gt;&lt;td&gt;0（512MB永久免费层）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;唯一的”付费”是一个多小时。个人博客的流量级，这些额度根本用不完。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;还可以继续做的&lt;a href=&quot;#还可以继续做的&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;管理员密码要在评论区后台手动设一次，评论的删除和禁用词都在那里管&lt;/li&gt;
&lt;li&gt;邮件通知可选配Resend免费API，Netlify环境发邮件走HTTP通道&lt;/li&gt;
&lt;li&gt;以后买了自定义域名，可以把整套迁到速度更快的平台上，Twikoo支持评论数据导出导入，搬家不丢数据&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;</content:encoded></item><item><title>你好，世界：我的博客开张了</title><link>https://saul-blog.pages.dev/posts/hello-blog/</link><guid isPermaLink="true">https://saul-blog.pages.dev/posts/hello-blog/</guid><description>折腾一个下午把博客搭起来了，后来又换了主题，记录选型与踩坑过程。</description><pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;缘起&lt;a href=&quot;#缘起&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;折腾了一个下午，终于把这个博客搭起来了。&lt;/p&gt;&lt;p&gt;过程比想象中顺利，也比想象中坑多。趁热把踩过的坑记下来，免得以后忘了。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;技术栈&lt;a href=&quot;#技术栈&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&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;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;静态站点生成器&lt;/td&gt;&lt;td&gt;Astro 7&lt;/td&gt;&lt;td&gt;构建 fast，默认零 JS，Markdown/MDX 写作&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;主题&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/CuteLeaf/Firefly&quot; target=&quot;_blank&quot;&gt;Firefly&lt;/a&gt;&lt;/td&gt;&lt;td&gt;基于 Fuwari 二开的中文友好主题，颜值在线&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;代码托管&lt;/td&gt;&lt;td&gt;Gitee&lt;/td&gt;&lt;td&gt;国内访问快&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;部署&lt;/td&gt;&lt;td&gt;Cloudflare Pages&lt;/td&gt;&lt;td&gt;全球 CDN，免备案&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;刚开张时用的是 Hexo + Butterfly，用了三天就换成了 Firefly，完整过程写在了&lt;a href=&quot;/posts/build-log/&quot;&gt;搭建实录&lt;/a&gt;里。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一个重要的教训&lt;a href=&quot;#一个重要的教训&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;网上的教程有很强的时效性。我照着 2021 年的文章操作，卡在了”开启 Gitee Pages 服务”这一步——这个功能 2025 年 10 月已经下架了。&lt;/p&gt;&lt;p&gt;搜索结果里的答案往往互相矛盾，最靠谱的做法是&lt;strong&gt;直接查官方文档或官方 issue&lt;/strong&gt;。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;接下来要做的&lt;a href=&quot;#接下来要做的&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt; 本地跑通 Hexo，部署到 Cloudflare Pages&lt;/li&gt;
&lt;li&gt; 换上 Firefly 主题（Astro）&lt;/li&gt;
&lt;li&gt; 绑定自己的域名&lt;/li&gt;
&lt;li&gt; 持续更新内容&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;慢慢来，先把内容写好。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Markdown 写作指南：语法速查</title><link>https://saul-blog.pages.dev/posts/markdown-guide/</link><guid isPermaLink="true">https://saul-blog.pages.dev/posts/markdown-guide/</guid><description>本站写作常用 Markdown 语法、front-matter 字段与主题扩展语法速查。</description><pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;新建文章&lt;a href=&quot;#新建文章&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;双击项目根目录的 &lt;code&gt;新建文章.bat&lt;/code&gt;，输入英文文件名后会自动生成模板并用编辑器打开。&lt;/p&gt;&lt;p&gt;文章都在 &lt;code&gt;firefly/src/content/posts/&lt;/code&gt; 目录下，图片放同级的 &lt;code&gt;images/&lt;/code&gt; 文件夹。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;前置参数（Front-matter）&lt;a href=&quot;#前置参数front-matter&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;每篇文章开头的 &lt;code&gt;---&lt;/code&gt; 包裹区域叫 front-matter，用来声明元信息：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;文章标题&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;published&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;2026-10-19&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;一句话简介（显示在列表卡片里）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;image&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;./images/cover.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tags&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;标签1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;标签2&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;分类&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pinned&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 设为 true 置顶&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&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;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;td&gt;显示用的标题，可写中文&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;published&lt;/code&gt;&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;td&gt;发布日期&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;&lt;td&gt;建议&lt;/td&gt;&lt;td&gt;摘要，列表页显示&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;image&lt;/code&gt;&lt;/td&gt;&lt;td&gt;建议&lt;/td&gt;&lt;td&gt;封面图，相对路径 &lt;code&gt;./images/xxx.jpg&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;td&gt;数组写法 &lt;code&gt;[A, B]&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;td&gt;只能填一个&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;pinned&lt;/code&gt;&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt; 置顶&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;常用语法&lt;a href=&quot;#常用语法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;标题&lt;a href=&quot;#标题&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;#&lt;/code&gt; 到 &lt;code&gt;######&lt;/code&gt; 对应一到六级标题。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;强调&lt;a href=&quot;#强调&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;粗体&lt;/strong&gt;、&lt;em&gt;斜体&lt;/em&gt;、删除线。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;列表&lt;a href=&quot;#列表&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;无序列表用 &lt;code&gt;-&lt;/code&gt;，有序列表用 &lt;code&gt;1.&lt;/code&gt;。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;链接与图片&lt;a href=&quot;#链接与图片&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;链接文字&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;https://example.com&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;![&lt;/span&gt;&lt;span&gt;图片说明&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;./images/photo.jpg&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;代码块&lt;a href=&quot;#代码块&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;用三个反引号包裹，并在开头标注语言：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;greet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Hello, &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;!`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;引用&lt;a href=&quot;#引用&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;这是一段引用文字。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;表格&lt;a href=&quot;#表格&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&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;**文字**&lt;/code&gt;&lt;/td&gt;&lt;td&gt;粗体&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;*文字*&lt;/code&gt;&lt;/td&gt;&lt;td&gt;斜体&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;主题扩展语法&lt;a href=&quot;#主题扩展语法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Firefly 在标准 Markdown 之上加了一些好用的指令：&lt;/p&gt;&lt;section&gt;&lt;h3&gt;提醒框（Callout）&lt;a href=&quot;#提醒框callout&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;!NOTE&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;gt; 提示内容&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;!WARNING&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;gt; 警告内容&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;支持 &lt;code&gt;NOTE&lt;/code&gt; / &lt;code&gt;TIP&lt;/code&gt; / &lt;code&gt;IMPORTANT&lt;/code&gt; / &lt;code&gt;WARNING&lt;/code&gt; / &lt;code&gt;CAUTION&lt;/code&gt;。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;GitHub 卡片&lt;a href=&quot;#github-卡片&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;::github{repo=&quot;CuteLeaf/Firefly&quot;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;a href=&quot;https://github.com/CuteLeaf/Firefly&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;CuteLeaf&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;Firefly&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;🍀Firefly, fresh and aesthetic Astro blog theme template. &lt;/div&gt;&lt;div&gt;&lt;div&gt;—&lt;/div&gt;&lt;div&gt;—&lt;/div&gt;&lt;div&gt;MIT&lt;/div&gt;&lt;span&gt;Astro&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;发布&lt;a href=&quot;#发布&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;写完保存，双击 &lt;code&gt;发布.bat&lt;/code&gt;，构建完成后自动上传到 Cloudflare Pages。&lt;/p&gt;&lt;/section&gt;</content:encoded></item></channel></rss>