|
目录
|
脚本详解:generate-archive.ps1归档 · 标签云 · 最新文章 · 搜索索引 这个脚本干什么
它必须在 元数据扫描脚本的第一件事是遍历博客目录,从每个 date)—— 兼容 2026-04-28 和 2026-04-28 23:30 两种格式title)—— 文章的显示名称tags)—— 逗号分隔的关键词,用于标签云draft: true)—— 如果存在,整篇文章被跳过,不出现在任何产出中所有文章信息存入一个 PowerShell 对象数组,按日期降序排列。这一步是整个脚本的数据基础,后续四种产出都从这个数组派生。 产出 A:最新文章组件取前 5 篇文章,生成 这里有一个值得说的细节:标题截断用的是像素宽度估算而非字符数。中文字符估算 11px,ASCII 估算 6px,总宽度超过 110px 就截断到 10 个字符。用字符数截断对于纯中文没问题,但中英混排的标题会差很多——"AAAAAAAAAA" 和 "中中中中中"同样是 5 个字,像素宽度能差一倍。在 CSS 输出文件用 UTF-8 without BOM 编码。因为它会被注入到已有 BOM 的页面中, 带 BOM 的话注入位置会多出乱码字符。 产出 B:文章归档页归档页的核心是按年-月分组。日期格式统一为 每个月份渲染为一个标题("2026年4月")+ 一个两列表格:左边是日期(黄色,130px 宽),右边是文章标题(青色链接)。这个页面没有侧边栏——它采用双栏布局,左边放博客文章,右边放其他页面(下载中心、FAQ 等),用 980px 的 table 居中。 归档页输出到 产出 C:标签云页标签云是四个产出中逻辑最复杂的一个。它需要构建一个标签→文章的反向索引:遍历所有文章的标签,用一个哈希表把每个标签映射到包含它的文章列表。 标签的字号根据文章数量分级:3 篇以上大号(size="4"),2 篇中号(size="3"), 1 篇小号(size="2")。三个级别足够区分,不需要更复杂的热度算法。 标签云下方是每个标签对应的文章列表,用 产出 D:搜索索引搜索索引是一个纯文本文件 文本提取的流程很简单:读 HTML → 正则剥离所有标签 → 替换 搜索是完全免 JavaScript 的——搜索框是一个 HTML 表单,提交到 CGI, 服务端做全文匹配,返回带高亮的结果页面。整个过程和 2002 年的搜索引擎工作原理一致。 双语支持脚本通过 设计思路如果把这个脚本拆成四个独立的脚本,代码会更模块化,但每次全站构建需要扫描 4 次博客目录。 一次扫描、四处输出的设计减少了 I/O。在这个只有几十篇文章的站点上,差异可能只有几百毫秒,但它体现了一种"提前想好数据流"的工程习惯——知道数据从哪里来、要到哪里去、中间经过几次变换。 PowerShell 的
|