Markdown 和 MDX
是一种用于格式化文本的轻量级标记语言。它允许您使用纯文本语法编写内容并将其转换为结构有效的 HTML。它通常用于编写网站和博客上的内容。
编写...
I **love** using [Next.js](https://nextjs.org/)
输出:
<p>I <strong>love</strong> using <a href="https://nextjs.org/">Next.js</a></p>
MDX是 Markdown 的超集,它允许您在 Markdown 文件中直接编 写JSX。这是一种强大的方式,可以在您的内容中添加动态交互性并嵌入 React 组件。
Next.js 可以支持应用程序中的本地 MDX 内容,以及在服务器上动态获取的远程 MDX 文件。Next.js 插件执行操作将 Markdown 和 React 组件转换为 HTML,包括在服务器组件中支持使用。(App Router 中的默认设置)。
您需要知道: 查看Portfolio Starter Kit 模板以获取完整的工作示例。
安装依赖项
@next/mdx包及相关包用于配置 Next.js,使其能够处理 Markdown 和 MDX。 它从本地文件中获取数据, 允许您在/pages或/app目录中直接创建具有.md 或 .mdx扩展名的页面。
安装这些包来使用 Next.js 渲染 MDX:
npm install @next/mdx @mdx-js/loader @mdx-js/react @types/mdx
配置 next.config.mjs
更新项目根目录下的next.config.mjs文件以配置使用 MDX:
import createMDX from "@next/mdx";
/** @type {import('next').NextConfig} */
const nextConfig = {
// Configure `pageExtensions` to include markdown and MDX files
pageExtensions: ["js", "jsx", "md", "mdx", "ts", "tsx"],
// Optionally, add any other Next.js config below
};
const withMDX = createMDX({
// Add markdown plugins here, as desired
});
// Merge MDX config with Next.js config
export default withMDX(nextConfig);
这允许.md和.mdx文件在您的应用程序中充当页面、路由或导入。
添加mdx-components.tsx文件
在项目根目录中创建一个mdx-components.tsx (或 .js) 文件,以定义全局 MDX 组件。例如,可以在与pages或app同级的位置,或者在src目录内(如果 src 目录存在)。
import type { MDXComponents } from "mdx/types";
export function useMDXComponents(components: MDXComponents): MDXComponents {
return {
...components,
};
}
export function useMDXComponents(components) {
return {
...components,
};
}
您需要知道:
- 了解更多关于
mdx-components.tsx文件约定的信息。- 了解如何使用自定义样式和组件。
渲染 MDX
您可以使用 Next.js 的基于路由的文件或通过将 MDX 文件导入其他页面来呈现 MDX。
使用基于路由的文件
当使用基于路由的文件时, 您可以像使用其他页面一样使用 MDX 页面。
在 App Router 应用中,这包括能够使用metadata。
在/app目录中创建一个新的 MDX 页面:
my-project
├── app
│ └── mdx-page
│ └── page.(mdx/md)
|── mdx-components.(tsx/js)
└── package.json
您可以在这些文件中使用 MDX,甚至可以在您的 MDX 页面中直接导入 React 组件:
import { MyComponent } from "my-component";
# Welcome to my MDX page!
This is some **bold** and _italics_ text.
This is a list in markdown:
- One
- Two
- Three
Checkout my React component:
<MyComponent />
导航到/mdx-page路由应该显示已渲染的 MDX 页面。
使用 import
在/app目录中创建一个新页面,并在您需要的地方创建一个 MDX file 文件:
my-project
├── app
│ └── mdx-page
│ └── page.(tsx/js)
├── markdown
│ └── welcome.(mdx/md)
|── mdx-components.(tsx/js)
└── package.json
您可以在这些文件中使用 MDX,甚至可以在您的 MDX 页面中直接导入 React 组件:
import { MyComponent } from "my-component";
# Welcome to my MDX page!
This is some **bold** and _italics_ text.
This is a list in markdown:
- One
- Two
- Three
Checkout my React component:
<MyComponent />
在页面中导入 MDX 文件以显示内容:
import Welcome from "@/markdown/welcome.mdx";
export default function Page() {
return <Welcome />;
}
import Welcome from "@/markdown/welcome.mdx";
export default function Page() {
return <Welcome />;
}
导航到/mdx-page路由应该会显示渲染了的 MDX 页面。
使用自定义样式和组件
Markdown 渲染后会映射到原生 HTML 元素。例如,编写以下 Markdown:
## This is a heading
This is a list in markdown:
- One
- Two
- Three