@ dualmark/ nextjs (帮助)
Next.js 双马克AEO框架的 App路由器适配器.
安装相同的一行 @dualmark/astro —— 说 withDualmark() 以给养,
createDualmarkMiddleware() 页:1 proxy.ts (或 middleware.ts 下一届第15次会议,
createDualmarkRouteHandler() 用于标记下双向处理器,以及
createLlmsTxtHandler() 页:1 /llms.txt。 。 。 .
安装
bun add @dualmark/nextjs @dualmark/core @dualmark/converters
使用量
import { withDualmark } from "@dualmark/nextjs";
export default withDualmark(
{ reactStrictMode: true },
{
siteUrl: "https://example.com",
collections: {
blog: {
converter: "blog",
getEntries: () => yourPosts,
},
},
llmsTxt: {
enabled: true,
brandName: "Acme",
sections: [{ title: "Pages", links: [{ title: "Home", href: "/" }] }],
},
},
);
import { createDualmarkMiddleware } from "@dualmark/nextjs";
const middleware = createDualmarkMiddleware({
siteUrl: "https://example.com",
});
export default middleware;
export const config = middleware.config;
在 Next.js ~15 上,请命名文件 middleware.ts 换句话说 体相一相相为相.
import { createDualmarkRouteHandler } from "@dualmark/nextjs";
import { POSTS } from "@/lib/posts";
const handler = createDualmarkRouteHandler({
siteUrl: "https://example.com",
collections: {
blog: {
converter: "blog",
getEntries: () => POSTS,
},
},
staticPages: [{ pattern: "/", render: () => "# Home\n\nWelcome." }],
});
export const GET = handler.GET;
export const generateStaticParams = handler.generateStaticParams;
export const dynamic = "force-static";
import { createLlmsTxtHandler } from "@dualmark/nextjs";
const handler = createLlmsTxtHandler({
brandName: "Acme",
sections: [{ title: "Pages", links: [{ title: "Home", href: "/" }] }],
});
export const GET = handler.GET;
export const dynamic = "force-static";
建筑
┌─────────────────────────────────────────────────────────────┐
│ proxy.ts │
│ - if path ends in .md → rewrite to /md/<path> │
│ - if AI bot UA OR Accept: text/markdown │
│ → rewrite to /md/<path> │
│ - if Accept rules out html+md → 406 │
│ - else (HTML) → next() + Link rel=alternate header │
└─────────────────────────────────────────────────────────────┘
app/
├── ...your existing pages
├── md/[...path]/route.ts ← createDualmarkRouteHandler (renders .md)
└── llms.txt/route.ts ← createLlmsTxtHandler (renders /llms.txt)
/md/... 是用户从未见过的内部命名空间——代理重写
发送到您的收藏、 静态页面或
参数化路线. 可配置通过 internalNamespace 如果你需要一个
不同名称.
内建转换器名称
blog, (中文(简体) ), case-study, (中文(简体) ), changelog, (中文(简体) ), compare, (中文(简体) ), docs, (中文(简体) ), feature, (中文(简体) ), glossary, (中文(简体) ),
legal, (中文(简体) ), pricing, (中文(简体) ), pseo, (中文(简体) ), status-page, (中文(简体) ), tool, (中文(简体) ), video通过其中任何一个 converter, (中文(简体) ),
或传递函数 (entry) => string 用于自定义输出.
为什么Next.js需要 getEntries
Astro已经 astro:content 自动发现收藏项.
Next.js没有对应内容——内容可以来自文件系统,一个CMS, a
数据库,任何东西。 所以,你供应 getEntries: () => Entry[] | Promise<Entry[]>
而适配器做其余的.
许可证
Apache 2.0 (英语)