这个站点:零构建、零依赖、原子发布

工程与部署 · 2025-08-10 · 4 分钟

旧版站点的零依赖实践,以及迁移到 SvelteKit 静态工程后的新边界。

版本说明:以下记录的是本站旧版静态页面的实践,保留为历史技术笔记。

这个站只有三个文件:一个 HTML、一个 CSS、一个 JS。没有框架,没有构建,没有依赖。

这不是为了炫技,是想验证一件事:一个有观点的小站,需不需要现代前端那一整套。结论是不需要——至少在它只有几页、不再频繁变动的时候。

用原生能力换掉依赖

阅读弹窗用的是原生 <dialog>。它自带焦点陷阱、Escape 关闭、以及浏览器级的顶层渲染,只需要补三件事:关闭后把焦点还给触发元素、点击遮罩区域关闭(判断点在元素矩形之外)、打开时锁住页面滚动。

页面里所有插画——星形轨道、代码窗、迷你仪表盘——都是 CSS 画的,没有一张图片。首屏因此几乎没有图片请求,也不需要在构建期处理多倍图。

让动效可关闭

系统级的"减少动态效果"必须被尊重,同时给一个手动开关,选择存在本地。触屏设备不启用鼠标跟随类效果——那里没有鼠标,跟随只会浪费电。

发布用符号链接

部署目录长这样:

releases/<日期>/ 放每一版文件,current 是指向当前版本的符号链接,Web 服务器指向 current。

发布 = 上传新目录 + 一条原子替换;回滚 = 把链接指回上一个版本,一条命令、瞬间生效、无需重新部署。文件还在,历史就是完整的。

简单不是"功能少",是"每个组成部分都被理解"。

从单页脚本到静态工程

新版采用 Svelte、TypeScript 与 SvelteKit,在构建阶段预渲染页面,部署产物仍是静态 HTML、CSS 和 JavaScript。正文独立为 Markdown,卡片与详情共用内容源,以稳定 slug 替代数组下标。

类型检查、内容校验和关键交互测试成为本地验证流程;构建资源使用文件哈希管理缓存。构建步骤增加了,但线上仍不需要 Node 服务,release 目录与原子切换的发布方式继续适用。