技术预览提交反馈

文章栏目

更新于 2026年11月12日

栏目是一组共享 URL 前缀、侧边栏和导航标签的文章。Livemark 内置三种栏目类型,外加一种只作为标签页的自定义类型:

  • Article:默认类型。一棵带有可折叠侧边栏的文章树。
  • Blog:按日期排序的文章,带有标签和自动生成的索引页。
  • Changelog:单个源文件(或 GitHub releases),按版本拆分为多篇文章。
  • Custom:链接到任意 URL(内部或外部)的标签页,自身不包含文章。

基本用法

livemark.config.ts
import { defineConfig } from "livemark"

export default defineConfig({
  site: "https://example.com",
  include: ["docs/**/*.md", "blog/**/*.md"],
  sections: [
    { title: "Docs", prefix: "/" },
    { title: "Blog", prefix: "/blog/", type: "blog" },
    {
      title: "Changelog",
      prefix: "/changelog/",
      type: "changelog",
      source: "CHANGELOG.md",
      version: true,
    },
  ],
})

省略 sections 时,所有文章都渲染到一个默认栏目中,适合小型站点。

通用字段

无论哪种类型,每个栏目都接受以下字段:

字段类型默认值用途
titlestring—栏目标签页和侧边栏标题的文字。
prefixstring—URL 前缀(例如 /、/blog/、/changelog/)。path 与之匹配的文章会路由到这里。除 custom 外的所有类型。
type"article" | "blog" | "changelog" | "custom""article"栏目类型。
iconstring—显示在标题旁的 Lucide 图标。未设置时标签页不显示图标。
position"header" | "sidebar""header"栏目标签页的渲染位置。
siteTitlestring—处于该栏目时,替换侧边栏标题和面包屑中的站点 title,并作为其 RSS 订阅源的标题。
siteDescriptionstring—处于该栏目时,替换侧边栏标题中的站点 description,并作为其 RSS 订阅源的描述。
siteLinkstring首页处于该栏目时站点标题链接的目标:内部路径或绝对 URL。

当顶栏中的栏目和链接放不下时,搜索框会先缩成一个图标,仍然放不下的项则收进 More 菜单。

在移动端,所有栏目都会收进侧边栏。在栏目内部,它们变成一个选择器,点开后弹出底部面板:选中某个栏目后,侧边栏会显示该栏目的文章、博文或版本,而无需离开当前页面。

文章栏目

普通文档。侧边栏显示文章树。这是默认类型,你可以完全省略 type:

{ title: "Docs", prefix: "/" }

博客栏目

博客栏目按 date 对文章排序(最新的在前),在栏目前缀处渲染自动生成的索引页,并提供按标签划分的页面。

{
  title: "Blog",
  prefix: "/blog/",
  type: "blog",
}

然后在每篇博文中:

---
title: Announcing v0.3
date: 2026-04-15
tags: [announcement, release]
---

Livemark 会自动生成:

  • /blog/:列出所有博文的索引页,最新的在前。
  • /blog/tags/<tag>/:每个标签一个页面。

更新日志栏目

更新日志栏目从一个 source 文件读取内容,并按每个 ## 标题将其拆分为一篇篇文章。

{
  title: "Changelog",
  prefix: "/changelog/",
  type: "changelog",
  source: "CHANGELOG.md",
  version: true,
}

像 ## 0.3.0 — 2026-04-01 这样的标题会成为位于 /changelog/0-3-0/ 的文章,以标题的第一个词命名。设置 version: true 后,顶栏中的栏目标签页还会在括号中显示最新版本。

一个站点可以声明多个更新日志栏目(例如在 monorepo 中每个包一个),只要每个栏目都有自己的 prefix。每个栏目都会在自己的前缀下渲染各自的版本页面、在侧边栏中显示各自的版本列表和最新版本,因此两个都包含 0.2.0 的更新日志会并列生成 /changelog/0-2-0/ 和 /python/changelog/0-2-0/。

sections: [
  {
    title: "Changelog",
    prefix: "/changelog/",
    type: "changelog",
    source: "CHANGELOG.md",
  },
  {
    title: "Python Changelog",
    prefix: "/python/changelog/",
    type: "changelog",
    source: "python/CHANGELOG.md",
  },
]

更新日志专用字段:

字段类型默认值用途
sourcestring—更新日志源文件的路径,相对于项目根目录。
versionbooleanfalse为 true 时,在顶栏标签页标题旁显示最新版本。

自定义栏目

自定义栏目使用 url 而不是 prefix,只渲染为一个标签页。内部 URL(如 /about/,例如一个自定义路由)会在你访问它时高亮该标签页;绝对 URL 则打开其他站点。

{ title: "About", type: "custom", url: "/about/" }

排序与匹配

文章路径按最长前缀优先的规则匹配到栏目。对于 /blog/2024/launch/,以及前缀分别为 / 和 /blog/ 的栏目,该文章会被放入 /blog/。

前缀请保留末尾斜杠(/blog/,而不是 /blog),以便匹配结果可预测。

另请参阅

  • 外部链接:在栏目标签页旁添加外部链接。
  • Frontmatter:决定栏目内容的 path、order、date 和 tags 字段。

用 ❤ 和 Livemark 构建