UNPKG

@next/mdx

Version:

Use [MDX](https://github.com/mdx-js/mdx) with [Next.js](https://github.com/vercel/next.js)

148 lines (109 loc) 3.1 kB
# Next.js + MDX Use [MDX](https://github.com/mdx-js/mdx) with [Next.js](https://github.com/vercel/next.js) ## Installation For usage with the `app` directory see the section below. ``` npm install @next/mdx @mdx-js/loader ``` or ``` yarn add @next/mdx @mdx-js/loader ``` ## Usage Create a `next.config.js` in your project ```js // next.config.js const withMDX = require('@next/mdx')() module.exports = withMDX() ``` Optionally you can provide [MDX plugins](https://mdxjs.com/advanced/plugins#plugins): ```js // next.config.js const withMDX = require('@next/mdx')({ options: { remarkPlugins: [], rehypePlugins: [], }, }) module.exports = withMDX() ``` Optionally you can add your custom Next.js configuration as parameter ```js // next.config.js const withMDX = require('@next/mdx')() module.exports = withMDX({ webpack(config, options) { return config }, }) ``` By default MDX will only match and compile MDX files with the `.mdx` extension. However, it can also be optionally configured to handle markdown files with the `.md` extension, as shown below: ```js // next.config.js const withMDX = require('@next/mdx')({ extension: /\.(md|mdx)$/, }) module.exports = withMDX() ``` In addition, MDX can be customized with compiler options, see the [mdx documentation](https://mdxjs.com/packages/mdx/#compilefile-options) for details on supported options. ## Top level .mdx pages Define the `pageExtensions` option to have Next.js handle `.md` and `.mdx` files in the `pages` directory as pages: ```js // next.config.js const withMDX = require('@next/mdx')({ extension: /\.mdx?$/, }) module.exports = withMDX({ pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'], }) ``` ## TypeScript Follow [this guide](https://mdxjs.com/advanced/typescript) from the MDX docs. --- # App directory ## Installation For usage with the `app` directory see below. ``` npm install @next/mdx ``` or ``` yarn add @next/mdx ``` ## Usage Create an `mdx-components.js` file at the root of your project with the following contents: ```js // Allows customizing built-in components, e.g. to add styling. const components = { // h1: ({ children }) => <h1 style={{ fontSize: "100px" }}>{children}</h1>, } export function useMDXComponents() { return components } ``` Create a `next.config.js` in your project ```js // next.config.js const withMDX = require('@next/mdx')({ // Optionally provide remark and rehype plugins options: { // If you use remark-gfm, you'll need to use next.config.mjs // as the package is ESM only // https://github.com/remarkjs/remark-gfm#install remarkPlugins: [], rehypePlugins: [], }, }) /** @type {import('next').NextConfig} */ const nextConfig = { // Configure pageExtensions to include md and mdx pageExtensions: ['ts', 'tsx', 'js', 'jsx', 'md', 'mdx'], // Optionally, add any other Next.js config below reactStrictMode: true, } // Merge MDX config with Next.js config module.exports = withMDX(nextConfig) ``` ## TypeScript Follow [this guide](https://mdxjs.com/advanced/typescript) from the MDX docs.