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/
作者
Chris Gray
发布于
2026-08-30
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Chris Gray
I am not what happened to me, I am what I choose to be.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
8
分类
2
标签
15
总字数
3,766
运行时长
0
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.4
文章许可
CC BY-NC-SA 4.0