MDX 2は次です.JSと埋め込みコンポーネント( ESM版)
動機と導入
我々は今とかなりの数のウェブサイトを作りましたNext.js and
我々は本当に経験と結果を愛する.ありがとう
Opstrace 我々はソースを巨大なコンポーネントを開くことができた
次の製品のドキュメントをレンダリングするには.JSページ
Next Product Docs .
しかし、全体のMarkdown生態系は進化しています
MDX 2のリリースでは、次のような設定ができます.
{2 \* Math.PI}
into 6.283185307179586
MDX 2に移動するにはいくつかのフープジャンプすることはありません.
我々は統合しようとしている
unified/remark/rehype
のような有用な機能を使用してMarkdownの処理と拡張性の改善
Github風味のマークダウン、外部リンクのハンドリングなど、我々も統合している
埋め込むなどのサードパーティ製プラットフォームであなたの仕事を披露する
rehypeはプラグインを使ってHTMLを変換するツールです
マークダウン.
この記事では2種類の埋め込み機構を使用しています.
remark-embedder
それはembedにベースの単純なリンクを変換するので、素晴らしいですoembed形式で.すべてがビルド/レンダリング時間中に行われるので、embed
コードは直接コンパイルされます
html
任意のクライアント側なしでジャバスクリプト.あなたは
list of supported oEmbed providers here .
mdx-embed
別のアプローチを取り、インポート
mdx
. 彼らは、コンポーネント/embedの異なるセットを持っています.良いニュース:あなたが望むならば、あなたは同じファイルで両方のアプローチを使うことができます.
以下に例を示します
remark-embedder
:https://twitter.com/PatrickHeneise/status/1508503730295037954
ボーナス:それはESMで動作します.
始める
どちらでも構いませんstart from scratch またはアップグレード
次に存在する.MDXプロジェクト.参考として
created a repository on GitHub と
実施例
セットアップ
必要なパッケージをリストアップし、優先パッケージマネージャを
インストールします.
基本( next . jsのmdx loader )
@mdx-js/loader @next/mdx
プラグイン/ rehypeプラグイン
rehype-external-links remark-gfm remark-frontmatter
https://github.com/remarkjs/remark/blob/main/doc/plugins.md#listプラグインの
https://github.com/rehypejs/rehype/blob/main/doc/plugins.md#listプラグインの
発言埋め込み
ビルド時にOembedを含める場合は
@remark-embedder/core @remark-embedder/transformer-oembed
MDX埋め込み
最後には、少なくとも「MDX埋め込み」コンポーネントを埋め込む
mdx-embed
次。JS設定
我々は、Webpackとを介してMDXの処理を統合している
@mdx-js/loader . を追加する必要があります
pageExtensions
とWebpackの設定.お気軽に追加/削除/rehypeを削除するここのプラグイン.
import remarkFrontmatter from 'remark-frontmatter'
import remarkGfm from 'remark-gfm'
import rehypeExternalLinks from 'rehype-external-links'
import fauxRemarkEmbedder from '@remark-embedder/core'
import fauxOembedTransformer from '@remark-embedder/transformer-oembed'
const remarkEmbedder = fauxRemarkEmbedder.default
const oembedTransformer = fauxOembedTransformer.default
const nextConfig = {
reactStrictMode: true,
experimental: { esmExternals: true },
pageExtensions: ['md', 'mdx', 'jsx', 'js'],
webpack: function (config) {
config.module.rules.push({
test: /\.mdx?$/,
use: [
{
loader: '@mdx-js/loader',
options: {
rehypePlugins: [rehypeExternalLinks],
remarkPlugins: [
remarkGfm,
remarkFrontmatter,
[remarkEmbedder, { transformers: [oembedTransformer] }]
]
}
}
]
})
return config
}
}
export default nextConfig
JSXページ
新しいページを作成できます
[post].jsx
). 我々はダイナミックなインポートを使用することができますMDXファイルの内容を通常のコンポーネントとして読み込む.我々も
動的インポート
mdx-embed
, モジュールはまだESM互換ではありません.import dynamic from 'next/dynamic'
import { getSlugs, getMeta } from 'utils/posts.js'
import { MDXProvider } from '@mdx-js/react'
export default function Post({ post, meta }) {
// import mdx
const Post = dynamic(import(`content/posts/${post}.mdx`))
// dynamic import because not ESM compatible
const embeds = dynamic(() => import('mdx-embed'))
const { CodePen, Gist } = embeds
const components = {
CodePen,
Gist
}
return (
<div>
<main>
<h1>{meta.title}</h1>
<article className="prose">
<MDXProvider components={components}>
<Post />
</MDXProvider>
</article>
</main>
</div>
)
}
MDXコンテンツ
これはレンダリングされるファイルです.これは、正規表現を使用して簡単なMDXファイルです
Markdown YLL FrontMatter、輸出よりむしろ.あなたは、あなたにそれを変えることができます
好き.コンポーネントを再度インポートする必要があります.
あなたはフルを見つけることができます
list of supported components on the mdx-embed page .
---
title: hello world
date: '2022-04-01'
preview: showing off twitter embeds
---
import { CodePen, Gist } from 'mdx-embed'
This is a demo post.
### Twitter Embed
https://twitter.com/PatrickHeneise/status/1508503730295037954
### The Gist ...
<Gist gistLink="PatrickHeneise/bbca1a8c4816f92aa3796db41a4a6203" />
### And the Pen
<CodePen codePenId="PNaGbb" />
これらの埋め込みコンポーネントに加えて、独自のJSXコンポーネントを追加することもできます.メイプルとして、我々は小さな
<Gallery>
コンポーネントグリッドでのイメージと表示
これは非常に簡単です
### Component
<Gallery images={['cyprus1.jpeg', 'cyprus2.jpeg', 'cyprus3.jpeg']} caption="This
is a caption" />
それはMarkdownに来る可能性の全く新しい世界を開きますコンテンツ.
概要とフィードバック
この記事ではMDX 2の基礎を調べ、アップグレードします.我々も学んだ
どのようにrehype/remarkプラグインを追加するには
レンダリング/ビルド時間とどのようにMDXのembedを使用して
サードパーティ製プラットフォームでの経験.あなたは
minimal example blog on GitHub .
私たちはあなたがこの記事を楽しんで、それは次のあなたの旅に役立つでしょう願っています.js
とmdx 2あなたがフィードバック、コメント、この記事についてのアイデアを持っているならば
share them here または
ノットオン.私たちはあなたから聞いてみたい.
Reference
この問題について(MDX 2は次です.JSと埋め込みコンポーネント( ESM版)), 我々は、より多くの情報をここで見つけました https://dev.to/zentered/mdx-2-with-nextjs-and-embed-components-esm-version-3aa1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol