Firefly 文章 slug 自动生成功能开发

641 字
3 分钟
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。

统一 Slug 校验#

随机 slug 和拼音 slug 的格式不同,因此公共校验只要求 slug 是非空字符串:

export const postSlugSchema = z.string().trim().min(1);

文章扫描、新建文章和 Obsidian 文章同步复用同一规则,避免不同脚本分别定义 slug 格式。

setup 生命周期阶段补全 Slug#

通过 Astro Integration 接入配置生命周期:

integrations: [
postSlugIntegration(siteConfig.post.slug),
]

该 Integration 在 astro:config:setup 阶段检查文章,仅允许 dev 命令写入缺失的 slug:

const builtSlugs = await buildPostSlugs({
mode,
write: command === "dev",
});

运行 pnpm dev 时,缺少 slug 的文章会生成随机 slug 并写回 frontmatter。已有非空 slug 不会重新生成。运行构建、检查、Astro 同步或预览命令时只进行校验,如果仍有文章缺少 slug ,流程会报错提醒。

创建文章时直接生成随机 Slug#

新建文章命令接收必填的分类和可选的标题:

Terminal window
pnpm new-post <category> [title]

标题为空时使用 buildPublishedDate() 生成的发布日期,随后直接以分类和标题生成 src/content/posts/<category>/<title>.md。当前配置为 random 时,新文章会立即得到 16 位随机 slug。写入文件前还会检查该值是否已被其他文章占用:

const published = buildPublishedDate();
const title = titleArgument || published;
const filePath = buildPostFilePath(category, title);
const slug = createPostSlug(title, siteConfig.post.slug);
await assertPostSlugAvailable(slug);

检查通过后,随机 slug 与其他 frontmatter 字段一同写入新文章,使文章从创建时开始就使用稳定的访问路径。文件名由标题决定,访问路径由 slug 决定,二者互不替代。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

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.
【宇宙安全声明】
本网站严格遵守地球及全宇宙现行与未来适用的法律法规、文明公约及时空秩序,坚决维护国家安全、世界和平、星际稳定与宇宙安全。
分类
标签
最新动态
站点统计
文章
9
分类
2
标签
15
总字数
5,377
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录