在 Next.js 中搭建 Markdown 博客
#Next.js#Markdown
整体思路
博客正文以 Markdown 文件存放,服务端解析 frontmatter 并渲染为 HTML。
解析 frontmatter
使用 gray-matter 读取元数据:
import matter from "gray-matter";
const { data, content } = matter(raw);
// data.title、data.date、data.tags ...渲染管线
通过 unified 组合 remark / rehype 插件,一次完成解析与高亮:
const html = await unified()
.use(remarkParse)
.use(remarkGfm)
.use(remarkRehype)
.use(rehypeSlug)
.use(rehypeAutolinkHeadings)
.use(rehypePrettyCode, { theme: "github-dark" })
.use(rehypeStringify)
.process(markdown);目录与安全
自动生成目录
从渲染后的标题节点提取 id,配合锚点滚动生成侧边目录。
防止 XSS
渲染前启用 rehype-sanitize,禁止未清洗内容直接注入 HTML。
小结
这套方案无需数据库,新增 .md 文件即可自动更新列表,部署简单。