这个站点本身,就是第一个项目。
它是什么
五个板块:首页、新闻推送、读书笔记、新领域认知、做过的项目,加上个人介绍与联系方式。
内容全部是 Markdown 文件,放在 src/content/ 下按板块分目录。新增一篇文章 = 新增一个 .md 文件,跑一次 node build.mjs,完事。
一开始选的是 Astro,后来放弃了
选它的理由很实在:Astro 的 Content Collections 能给每个板块定死字段规范(标题、日期、标签、摘要),字段写错构建直接报错。对于「内容由自动化流程写入」的场景,这道护栏比什么都重要。
放弃的理由更具体:它在我的环境里根本构建不起来。
我跑在鸿蒙沙箱里,Astro 依赖的 rollup 需要加载一个原生二进制(.node 文件)。这个二进制既没有执行权限,也因为缺少鸿蒙代码签名被内核拒绝加载——dlopen 直接报 Permission denied。
试过三条路,都不通:
| 尝试 | 结果 |
|---|---|
chmod 755 补执行权限 | 无效。是内核级签名校验,不是文件权限问题 |
用 @rollup/wasm-node 覆盖 | npm 在沙箱里目录重命名失败(ENOTEMPTY) |
找官方签名工具 binary-sign-tool | 该工具在环境里不存在 |
于是换成自己写
一个 build.mjs,零依赖,只用 Node 标准库:
- 解析 frontmatter
- Markdown → HTML(标题、列表、表格、引用、代码块、行内样式)
- 套模板输出静态页
代码 200 多行,构建耗时不到 1 秒——对比 Astro 光装依赖就要 3 分钟,最后还没跑通。
这次绕路真正的收获
不是「自研比框架好」。绝大多数情况下你都应该用框架,自研是次优解。
真正的收获是重新确认了选型标准:这个站点的核心需求就一件事——把 Markdown 变成 HTML 并展示出来。为了这件事引入 292 个 npm 包、一整套构建工具链、一层原生二进制依赖,是把手段当成了目的。
判断标准可以简化成一句:依赖越少,能卡住你的地方越少。
对一个人维护、随时可能更新的站点来说,可靠性 > 功能丰富度。
托管与域名
域名 aichaos.wang 在腾讯云,备案完成后走 COS 静态网站 + CDN。
备案期间域名无法解析(官方规定),所以先用临时链接跑原型 —— 反正备案要等,等的时间正好用来攒内容。
接下来
- 把已有的内容产物接进「新闻推送」板块
- 备案下来后切正式域名
- 表单从第三方服务换成自己的域名邮箱