Firefly 文章 slug 自动生成功能开发
477 字
2 分钟
Firefly 文章 slug 自动生成功能开发
需求描述
当前 Firefly 的文章 slug 仅支持依赖文章标题的拼音转写的生成模式,该模式与文章标题强耦合,文章标题修改会导致其与链接不一致。希望新增一种业务无关的 slug 模式,同时支持自动检测并补全缺失 slug 的文章。
功能设计
新增 Slug 模式配置
在文章内容页配置中增加 slug 模式配置项:
post: { slug: "random",}配置类型同步新增:
slug: "pinyin" | "random";其他模块通过 PostSlugMode 复用该配置项的派生类型,避免再次定义相同的模式范围。
export type PostSlugMode = SiteConfig["post"]["slug"];生成业务无关的随机 Slug
random 模式使用 Node.js 的 crypto.randomBytes 生成 8 字节随机数,再转换为 16 位小写十六进制字符串。
function createRandomSlug(): string { return randomBytes(8).toString("hex");}随机值不读取文章标题、正文、分类或路径,因此这些业务内容发生变化时不会影响已写入的 slug。
setup 生命周期阶段补全 Slug
通过 Astro Integration 接入配置生命周期:
integrations: [ postSlugIntegration(siteConfig.post.slug),]该 Integration 在 astro:config:setup 阶段检查文章,仅允许 dev 命令写入缺失的 slug:
const generated = await syncPostSlugs({ mode, write: command === "dev",});运行 pnpm dev 时,缺少 slug 的文章会生成随机 slug 并写回 frontmatter。已有非空 slug 不会重新生成。运行构建、检查、Astro 同步或预览命令时只进行校验,如果仍有文章缺少 slug ,流程会报错提醒。
创建文章时直接生成随机 Slug
当前配置为 random 时,新文章会立即得到 16 位随机 slug。写入文件前还会检查该值是否已被其他文章占用:
await assertPostSlugAvailable(slug, targetDir);检查通过后,随机 slug 与其他 frontmatter 字段一同写入新文章,使文章从创建时开始就使用稳定的访问路径。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Firefly 文章 slug 自动生成功能开发
https://blog.elephantgris.space/posts/069ba0f6eb66dbf0/相关文章智能推荐
1
Firefly 头像组件圆形旋转效果功能开发
开发侧边栏头像原为静态方形,缺少悬停反馈;通过正方形约束和圆形裁切统一外观,并为内部图片添加悬停旋转与移出归位动画。
2
Firefly Footer 组件页面置底布局功能开发
开发短页面的 Footer 会紧跟正文而无法贴近视口底部;通过逐层继承最小高度、调整响应式 Grid 行结构并恢复移动端 Grid 布局,使 Footer 在短页面置底、长页面随内容延伸。
3
Obsidian Kanban Bases View 卡片排序功能开发
开发Kanban Bases View 的拖动顺序只能隐式保存,无法写入笔记或供其他视图复用;新增可选 Card order 属性,按序号排序并在同列、跨列拖动后回写连续序号。
4
基于 SSH 反向端口转发的服务器联网代理
开发服务器无法直接联网,apt 和 uv 无法更新依赖;通过 SSH 反向端口转发复用本机 Clash 代理,并为 apt 与环境变量配置本地代理端口。
5
Codex TRACE 日志写盘问题修复
开发Codex 桌面端持续写入大量 TRACE 日志,造成 SQLite WAL 频繁写盘;通过 BEFORE INSERT 触发器忽略 TRACE,保留其他级别日志并支持回滚。
随机文章随机推荐


