维护记录#
完成的工作#
- 将首页从
profileMode 切换为 PaperMod 的 Regular Mode:移除 params.profileMode 配置,新增 params.homeInfoParams,保留原有站点标题与副标题展示。✅ - 新增
params.env = "production",让 PaperMod 在所有构建场景下都按生产环境处理(影响 robots、图片优化等)。✅ - 新增
scripts/optimize-images.ts 图片压缩脚本,使用 sharp 对 PNG/JPEG/WebP/AVIF/GIF/TIFF 进行压缩、限制最大宽度、生成 WebP 变体;并在 package.json 中加入 sharp 开发依赖。✅ - 更新
.github/workflows/deploy.yml:新增 bun install 和 Optimize images 步骤,CI 每次构建时自动为 assets/images 生成宽度不超过 1200px 的 .webp 变体,且不覆盖原图。✅ - 新增
scripts/rename-posts.ts:将 content/posts/ 下的文章批量重命名为 YYYYMMDD[xxxxxx].md(方括号为字面字符),其中日期取自 frontmatter date 字段,hash 是去除 frontmatter 后的 body 用 SHA-256 取前 3 字节(24 bit)后转 base36(6 位固定长度)。配套重命名 assets/images/covers/{slug}.svg 并改写 frontmatter cover.image;用 git mv 保留历史,git 不可用时降级 fs.rename;支持 --dry-run / --verbose;已是新格式、缺 date、格式无效的文件自动跳过;目标名碰撞时按用户策略「报错停止」并列出冲突文件。✅ - 新增
scripts/__tests__/rename-posts.test.ts:30 个测试覆盖 normalizeDate(三种日期格式 + 月日越界 + 补零)/ extractBody / computeHash6(确定性、长度、base36 字符集、对末尾空白敏感、SHA-256 已知向量防止误改回 djb2)/ rewriteCoverImage / buildReport(7 个集成测试覆盖有效文章、缺 date、无效 date、已是新格式、忽略 _index.md、自定义封面不重命名、封面物理缺失)/ detectCollisions。全绿(bun test 134/134 通过)。✅ - 用
git rm 删除 5 对重复文章中用户指定的 5 个,同步删除对应的 5 个 cover SVG(避免 sync-covers 误判为孤儿、且这些 SVG 本来就只服务被删的 .md)。✅ - 执行
bun scripts/rename-posts.ts 完成 216 篇文章 + 215 个 cover SVG 的一次性重命名;git 全部以 R (rename) 跟踪,完整保留历史。✅ - 验证
bun scripts/validate-posts.ts 全绿 + hugo --minify 干净构建(265 页)。✅
遇到的问题#
- 用户最初理解
YYYYMMDD{6位hash}.md 时我误把方括号当成可选语法,按无方括号实现,后被纠正改为字面方括号 YYYYMMDD[xxxxxx].md(修正 computeHash6 输出格式 + 测试 + 注释)。⚠️ - 用户指出 hash 用自写 djb2 不专业,改用
node:crypto 的 SHA-256(前 3 字节,分布更均匀、行业标准)。⚠️ - dry-run 时脚本在 5 对文件上报告目标名碰撞,怀疑 djb2 分布问题。实际排查:4 种不同哈希(djb2 24bit / djb2 full 32bit / FNV-1a 24bit / xxhash32 24bit)以及 SHA-256 全部在完全相同的 5 对上碰撞 → 证实这 5 对 body 真的 100% 相同(完整 64 字符 SHA-256 也一致),属于历史遗留的真实重复文章,不是哈希质量问题。⚠️ 解决方案:用户手动选保留哪个,
git rm 删另一个,配套 cover SVG 同步删除。 - 第一次
hugo --minify 后看到 public/ 里仍有 2020-10-29-log-8/ 等旧 URL,怀疑 Hugo 把新文件当旧名渲染。⚠️ 实际是 hugo 没清空 public/,旧文件残留;rm -rf public/ resources/ && hugo --minify 后正确:URL 形如 /posts/2020031100oh3i/,Hugo slugify 自动去掉方括号。⚠️ - URL 全部变更:旧
/posts/2020-03-11-github-actions/ → 新 /posts/2020031100oh3i/。按用户决定不添加 alias,所有旧 URL 将 404。⚠️
下次建议#
- 如需进一步自定义首页信息卡片样式,可通过
assets/css/extended/*.css 覆盖 .home-info 相关样式。 - 旧的
/posts/{slug}/ URL 已全部失效。如未来想恢复外部链接有效性,可写一个小脚本扫描 git 历史为每篇生成 aliases frontmatter。 - 部署到生产后建议用
curl -I 抽查若干新旧 URL 确认 404/200 符合预期,并提交 Google Search Console 站点地图更新。