Skip to Content
🎉 Nextra 4.0 已发布。dimaMachina 正在 寻找新工作或咨询机会 

content 目录

content 目录旨在:

  1. 以最小更改迁移现有的 Next.js pages 路由器,您只需 将 pages 目录重命名为 content
  2. 避免使用 page 文件名约定,例如 app/configuration/page.mdxcontent/configuration.mdx

设置

创建您的第一个 MDX 页面作为 content/index.mdx

content/index.mdx
# Welcome to Nextra Hello, world!
Tip

您可以将 content 目录保留在项目根目录中,或在 src 目录 中。

next.config 文件中设置 contentDirBasePath 选项(可选

如果您想从不同的路径提供内容,可以设置 contentDirBasePath 选项:

next.config.mjs
import nextra from 'nextra' const withNextra = nextra({ contentDirBasePath: '/docs' // 或者甚至嵌套的,例如 `/docs/advanced` })

添加 [[...mdxPath]]/page.jsx 文件

将此文件放置在 app 目录中,内容如下:

[[...mdxPath]]/page.jsx
import { generateStaticParamsFor, importPage } from 'nextra/pages' import { useMDXComponents as getMDXComponents } from '../../../../mdx-components' export const generateStaticParams = generateStaticParamsFor('mdxPath') export async function generateMetadata(props) { const params = await props.params const { metadata } = await importPage(params.mdxPath) return metadata } const Wrapper = getMDXComponents().wrapper export default async function Page(props) { const params = await props.params const { default: MDXContent, toc, metadata, sourceCode } = await importPage(params.mdxPath) return ( <Wrapper toc={toc} metadata={metadata} sourceCode={sourceCode}> <MDXContent {...props} params={params} /> </Wrapper> ) }

您应该得到以下结构:

    • layout.jsx
      • page.jsx
    • index.mdx
  • next.config.js
  • package.json
Tip

将单一捕获所有路由 [[...mdxPath]]/page.jsx 视为通往 您的 content 目录的入口。

如果您在 next.config 文件中设置了 contentDirBasePath 选项,则应将 [[...mdxPath]]/page.jsx 放入相应目录中。

您已准备就绪!

Note

许多现有解决方案,例如 Refreshing the Next.js App Router When Your Markdown Content Changes  依赖额外的依赖项,如 concurrentlyws。这些方法包括 Dan Abramov 使用 <AutoRefresh> 组件和开发 WebSocket 服务器的变通方法

Nextra 的 content 目录开箱即用,提供了一个简化的解决方案:

  • 您无需安装不必要的依赖项
  • 您无需在 content 目录更改时重启服务器
  • 热重载开箱即用
  • 您可以在 MDX 文件中使用 import 语句,并且 静态图像 也能正常工作

请查看 Nextra 的 文档网站 i18n 网站示例 

Last updated on