异步模式
内容文件的运行时编译。
介绍
默认情况下,所有 Markdown 和 MDX 文件都需要先进行预编译。开发服务器也适用相同的限制。
对于大型文档站点,这可能会导致开发服务器启动时间更长。您可以在文档集合上启用异步模式来改善这一点。
设置
启用异步模式。
import { defineDocs } from 'fumadocs-mdx/config';
export const docs = defineDocs({
dir: 'content/docs',
docs: {
async: true,
},
});Next.js
Turbopack 目前不支持懒加载打包,异步模式通过使用 MDX Remote 进行按需编译来实现。
您需要安装额外的依赖:
npm i @fumadocs/mdx-remote shiki限制
异步模式对 Next.js 的 MDX 功能有一些限制。
- MDX 文件中不允许导入/导出。 对于 MDX 组件,请通过
componentsprop 传递它们。 - 图像必须使用 URL 引用(例如
/images/test.png)。 不要使用文件路径,如./image.png。您应该将图像放置在public文件夹中,并使用 URL 引用它们。
Vite
Vite 原生支持懒加载打包,启用后您只需更新 loader() 即可。
import { loader } from 'fumadocs-core/source';
import { docs, create } from '@/.source';
export const source = loader({
baseUrl: '/docs',
source: await create.sourceAsync(docs.doc, docs.meta),
source: await create.sourceLazy(docs.doc, docs.meta),
});使用
Frontmatter 属性仍然在 page 对象上可用,但您需要调用 load() 异步函数来加载编译后的内容(及其导出)。
例如:
import { source } from '@/lib/source';
import { getMDXComponents } from '@/mdx-components';
const page = source.getPage(['...']);
if (page) {
// frontmatter 属性可用
console.log(page.data);
// Markdown 内容需要 await
const { body: MdxContent, toc } = await page.data.load();
console.log(toc);
return <MdxContent components={getMDXComponents()} />;
}使用异步模式时,我们强烈推荐使用第三方服务来实现搜索,这些服务通常具有更好的处理大量内容索引的能力。
How is this guide?
Last updated on
