Project — 2026
hirohyun.com
这个双语网站怎样保存文章、整理照片,以及一次相册消失的故障留下的教训。
这个网站曾经出过一次很小、也很容易误判的故障:电脑上可以正常看到相册,构建也通过了,发布出去的网站却缺了整个摄影部分。
后来查到,是一条 Git 忽略规则出了问题。原本用来排除本地照片暂存目录的写法,同时匹配了相册的源文件目录。这些文件留在电脑上,所以本地一切正常;它们没有进入仓库,线上构建自然也拿不到。
修复只需要改一条规则。此后,项目的工作约定里多了一件事:发布后,打开线上页面看一遍。做个人网站,许多维护工作就是从这样一件小事里长出来的。
改过的文字怎样到达页面
网站使用 Astro 6 和 TypeScript。公开页面提前生成,由 Cloudflare Pages 分发。读者点开文章时,拿到的是已经准备好的页面文件。
文章以 Markdown 或 MDX 文件保存在代码仓库里,日常可以通过 TinaCMS 的编辑界面修改。保存后,改动提交到 GitHub,触发一次新的构建。写错的句子可以改,想看看先前怎么写的,也能沿着提交记录找回去。
中文和英文各有自己的文章文件,再按同一篇内容配对。这样,中文开头需要多讲一点背景,或是某个解释换一种顺序,都有地方可改。页眉的语言切换会把读者带到对应版本。
站内搜索也在构建时准备好。Pagefind 从生成的页面里建立索引,读者打开搜索框时,浏览器再加载搜索程序。文章能否搜到,因此也取决于这次发布有没有成功。
照片先整理,再放进相册
相册的照片有单独的导入过程。导入程序先生成几个尺寸的 AVIF、WebP 图片和 JPEG 备用版本,再上传到 Cloudflare R2。相册保存一份清单,页面根据清单提供图片,浏览器按需要选择尺寸。
照片准备好以后,改一段文字,可以直接使用已有的图片重新生成页面。文章编辑器里的插图另走一条上传路径:通过 Worker 存进 R2。相册导入时的图片处理,不能据此推及每一张正文插图。
视频放在 YouTube,页面先显示封面,读者点开以后再加载播放器。
这些安排最后都落在很具体的事情上:一篇文章改好了,另一个语言版本能找到,选好的照片也出现在预定的位置。每次发布后重新打开页面,就是再确认一次这些事情。相册消失过一次以后,这个动作便很容易记住了。