跳到正文
神奇海星的Blog

博客搭起来了

1 分钟 随笔

这是第一篇文章。它同时也是这个站点的一条测试用例 —— 中文标题、多级标题、代码块、引用和列表,该有的都有。

静态站

核心诉求其实很简单:写得顺手,打开够快。

动态博客(WordPress 那一类)能做的事更多,但代价是需要长期维护一个数据库和一个运行时。对个人博客来说,这笔账通常不划算:真正会被访问的只有渲染好的 HTML,而渲染这件事完全可以在我自己的电脑上做完。

静态站的好处是这一条:服务器上只需要一个 Nginx,没有 Node、没有数据库、没有需要定期打补丁的运行时。服务器被攻击的面也小得多。

关于中文排版

中文和英文的排版需求相当不同,这一点在动手写样式时很快就体现出来了:

  • 中文没有词间空格,所以行高需要更大才能不显得拥挤,1.75 到 1.8 比较舒服
  • 英文按词断行,中文按字断行,所以行宽不能照搬英文博客常见的 65ch
  • 中英混排时,数字和英文单词两侧需要一点空隙,否则会「粘」在汉字上

最后一条尤其容易被忽略。如果 HTML 压缩器把内联元素之间的空白删掉,阅读 5 分钟 和 · 就会连成一坨 —— 这恰好是 Astro 7 的一个默认行为变化,我在构建配置里把它关掉了。

坑

Astro 7 把 compressHTML 的默认值从 true 改成了 'jsx'。听起来只是压缩策略的调整,但对中文站点影响直接:

// 在 Astro v7 之前,这行会渲染成 "hello world"
// 在 Astro v7 里,'jsx' 模式会吞掉空白,变成 "helloworld"
export default defineConfig({
  compressHTML: true, // 显式设回,恢复无损压缩
});

这类「默认值悄悄变了」的改动是最难排查的一类问题:代码没动、逻辑没错,只是输出少了一个空格。

接下来

后面会陆续写一些技术笔记。这个站点的全部内容都在 Markdown 里,加一篇新文章就是新建一个文件,然后跑一条部署命令。

  • 写作时只管写 Markdown,不用碰模板
  • 构建时 schema 会校验 frontmatter,写错日期会立刻报错
  • 部署是原子的:新版本要么完整上线,要么完全不上线,不存在中间状态