功能预览
静态站生成器本身不带编辑入口,内容改在代码仓库的文本文件里,改完必须重新生成并推送才算上线。需要工程介入的通常是三类改动:字段结构调整、模板修改和批量替换。带后台的内容管理系统把这三步收进界面,自定义字段决定编辑能改到哪一层,可视化模板编辑与批量导入减少了对代码的依赖,发布前还能用草稿状态预览。
静态站生成器只产出页面,编辑的内容要在哪里改?答案在生成流程里:内容以文本文件保存在代码仓库中,编辑动作发生在仓库文件或配套的编辑界面,生成器把它们编译成静态页面,再把产物发布出去。也就是说,改完文件还不算上线,必须重新生成并推送产物,用户看到的那一份才是新的。当天复核到的项目说明把这条路径的特征写得很清楚:Hugo 是用 Go 语言编写的静态站点生成器,为速度而设计、为灵活性而设计,产出的就是一组静态页面。
第一步是内容存储,通常是一组带元数据的文本文件,字段以键值形式写在文件头部。第二步是构建,生成器读取模板与内容,输出完整站点目录。第三步是发布,把产物推到托管环境,可用内容分发网络直接对外。
这条链路的优点是产物简单、访问侧几乎没有运行时开销;代价是「改一个字」也要走完构建与发布,而且构建成功不等于内容正确,改坏了要回退历史版本。
按改动类型分,编辑接触的对象并不一样:
| 改动类型 | 静态站要动的东西 | 谁来做 | 常见卡点 |
|---|---|---|---|
| 改正文与标题 | 文本文件正文与头部字段 | 编辑可做 | 字段名拼错导致构建失败 |
| 加一个新字段 | 内容结构定义与所有相关模板 | 必须工程介入 | 模板未适配,页面显示空白 |
| 改样式或布局 | 模板文件与静态资源 | 必须工程介入 | 需要懂模板语法与构建配置 |
| 批量替换措辞 | 全仓库检索替换后重新构建 | 工程与编辑协作 | 容易误改地址与代码片段 |
| 撤回一篇内容 | 提交删除并重新发布 | 编辑可做 | 旧产物仍在缓存里被访问到 |
内容模型在这里是分界线:字段结构由程序定义好、编辑只在既定结构里填内容的场景,运营能自己走完;结构本身要变,就必须回到仓库。
第一类是结构调整。自定义字段增删会连带影响模板取值与列表筛选,改一次要核对全站引用。第二类是模板层改动,包括页面结构、组件与交互,这类改动还要验证生成后的页面是否符合预期。第三类是批量替换与批量导入:一次性动几十篇内容时,静态站的正确做法是先在小分支上试跑构建,确认输出再合并,而这一步往往要工程帮忙配置。
发布前没有可回退的中间态,也是静态站的特点。要「先看看效果」,得靠预览分支或本地构建,运营一般接触不到这些命令。
把编辑入口收进界面之后,链路会短一截,AnQiCMS(安企CMS)的做法可以当作样本对照:
两种方式不是替代关系。静态站适合内容与访问都在工程侧掌控的场景;有后台的方式适合运营节奏快、改动频繁、参与人多的站点。判断点很实在:站点的内容是不是每天有人改,改的人会不会用命令行。
编辑能不能不找开发自己改? 在既定内容模型里改正文、标题与已有字段可以;要加新字段或改布局,仍然要工程介入。
改了没生效一般是哪一层? 依次检查构建是否成功、产物是否发布、缓存是否清理,静态站最常见的是后两层。
已经用静态站了,还能配独立编辑端吗? 可以,通过无头内容仓库加接口调用的组合实现,代价是要同时维护生成与发布两条链路。
预览
自定义内容模型加新字段,影响的只是字段层,老文章的正文不会被读不出来:新字段在既有文档上是空的,模板读到空值而不是报错。真正会出问题的是模板里把空值当成必取项、以及批量导入时列名与新字段没对齐。改前先备份,按分类分批迁移,出错还能退回。
预览
稿件发出去才发现用词违规,问题在于把合规检查全押在发布之后。敏感词过滤在写入时生效,内容审核在发布前生效,关键词替换与全站替换用于批量改掉既有表述。三道防线各自拦在不同步骤,配合草稿、待发布、回收站的状态流转,才能保证违规词不上线、上线了也能退回来。
预览
未受保护的表单六成以上提交来自机器人,防垃圾的顺序是先加隐藏字段再考虑验证码:隐藏字段对真人无打扰、能挡掉大量按模板填写的基础机器人,但挡不住人工代打服务;验证码提高拦截上限却增加真人被误拒的概率。按投诉量与漏网比例决定是否加第二层。