MatxへのGatsby remarkブログの移行
9286 ワード
この記事では、MDXを使用するために定期的にギャツビーのブログを移行する方法を紹介します.
MDXでは、JSXをMarkdownで使用できます.あなたがMarkdownを使っている既存のギャツビーブログを持っているならば、MDXに移行するための簡単なガイドはここにあります.
出発点として、我々は使用しますGatsby starter blog すぐに私たちのブログを設定します.MDXを使用するために、この定期的なMarkdownブログを回しましょう.
まず、端末を開き、新しいサイトを作成します
まず、私たちのブログのMDXサポートを追加する必要があります.インストールしましょう
今すぐ更新する必要があります
次に、gatsbyにMDXを使うように指示する必要があります.移動する
次に、ブログ投稿テンプレートを更新する必要があります
The
まず、変更
我々は何も持っていないので
MDXブログアップ.
を、おそらく動作しませんでした.それで、私が直面した若干の誤りは、ここにあります、そして
どのように私はそれらを修正しました.
あなたはおそらく上記の手順のいずれかを逃した.もう一度それを通過し、何を逃したを見つける.また、すべてのGraphSQLクエリが有効かどうかを確認します.
を変更してください
JSXが有効であることを確認してください.以下に注意してください. 変更する すべて確認 インラインスタイルをオブジェクトとして書き込みます.
走ってみる
そして、それ!私たちはMDXのブログをアップロードして実行した.エンター
MDXブログの設定
MDXでは、JSXをMarkdownで使用できます.あなたがMarkdownを使っている既存のギャツビーブログを持っているならば、MDXに移行するための簡単なガイドはここにあります.
出発点として、我々は使用しますGatsby starter blog すぐに私たちのブログを設定します.MDXを使用するために、この定期的なMarkdownブログを回しましょう.
まず、端末を開き、新しいサイトを作成します
gatsby-starter-blog
テンプレート.gatsby new my-blog https://github.com/gatsbyjs/gatsby-starter-blog
すぐにサイトのディレクトリに移動します.cd my-blog
MDXプラグインの追加
まず、私たちのブログのMDXサポートを追加する必要があります.インストールしましょう
gatsby-plugin-mdx
プラグインとその依存関係.また、既存のgatsby-transformer-remark
プラグイン.npm install @mdx-js/mdx@v1 @mdx-js/react@v1 gatsby-plugin-mdx
npm remove gatsby-transformer-remark
あなたは正しいバージョンをインストールする必要がありますそれ以外の場合、動作しません.今すぐ更新する必要があります
gatsby-config.js
ファイル.置換gatsby-transformer-remark
with gatsby-plugin-mdx
そして、plugins
オプションgatsbyRemarkPlugins
.// gatsby-config.js
{
- resolve: `gatsby-transformer-remark`,
+ resolve: `gatsby-plugin-mdx`,
options: {
- plugins: [
+ gatsbyRemarkPlugins: [
{
resolve: `gatsby-remark-images`,
options: {
maxWidth: 630,
},
},
// Other Gatsby remark plugins
],
},
}
Gatsbyノードの更新。js
次に、gatsbyにMDXを使うように指示する必要があります.移動する
gatsby-node.js
を返します.allMarkdownRemark
with allMdx
.// gatsby-node.js
const result = await graphql(
`
{
- allMarkdownRemark
+ allMdx(
sort: { fields: [frontmatter___date], order: ASC }
limit: 1000
) {
nodes {
id
fields {
slug
}
}
}
}
`
)
また、変更posts
定数.// gatsby-node.js
- const posts = result.data.allMarkdownRemark.nodes
+ const posts = result.data.allMdx.nodes
さらに、我々は変更する必要がありますonCreateNode
使うMdx
の代わりにMarkdownRemark
.// gatsby-node.js
exports.onCreateNode = ({ node, actions, getNode }) => {
const { createNodeField } = actions
- if (node.internal.type === `MarkdownRemark`) {
+ if (node.internal.type === `Mdx`) {
const value = createFilePath({ node, getNode })
createNodeField({
name: `slug`,
node,
value,
})
}
}
最後にcreateSchemaCustomization
フックチェンジMarkdownRemark
to Mdx
// gatsby-node.js
exports.createSchemaCustomization = ({ actions }) => {
const { createTypes } = actions
createTypes(`
// Previous types
- type MarkdownRemark implements Node {
+ type Mdx implements Node {
frontmatter: Frontmatter
fields: Fields
}
// Other stuff
`)
}
ブログ投稿テンプレートの更新
次に、ブログ投稿テンプレートを更新する必要があります
src/templates/blog-post.js
. The MDXRenderer
コンポーネントは、.mdx
ファイルをインポートしましょう.// src/templates/blog-post.js
import { MDXRenderer } from 'gatsby-plugin-mdx';
ここで、GraphSQLクエリでは、markdownRemark
with mdx
そして、html
フィールドbody
.// src/templates/blog-post.js
export const pageQuery = graphql`
query BlogPostBySlug(
$id: String!
$previousPostId: String
$nextPostId: String
) {
site {
siteMetadata {
title
}
}
- markdownRemark(id: { eq: $id }) {
+ mdx(id: { eq: $id }) {
id
excerpt(pruneLength: 160)
- html
+ body
frontmatter {
title
date(formatString: "MMMM DD, YYYY")
description
}
}
- previous: markdownRemark(id: { eq: $previousPostId }) {
+ previous: mdx(id: { eq: $previousPostId }) {
fields {
slug
}
frontmatter {
title
}
}
- next: markdownRemark(id: { eq: $nextPostId }) {
+ next: mdx(id: { eq: $nextPostId }) {
fields {
slug
}
frontmatter {
title
}
}
}
`
削除するsection
タグを追加MDXRenderer
コンポーネント.その後、post
使用定数mdx
.// src/templates/blog-post.js
- <section dangerouslySetInnerHTML={{ __html: post.html }} itemProp="articleBody"/>
+ <MDXRenderer>{post.body}</MDXRenderer>
// src/templates/blog-post.js
- const post = data.markdownRemark
+ const post = data.mdx
ホームページの更新
The
src/pages/index.js
ファイルを変更する必要があります.我々がしたことに似ているsrc/templates/blog-post.js
, 我々はすべての発生を変更する必要がありますallMarkdownRemark
with allMdx
.まず、変更
posts
定数// src/pages/index.js
- const posts = data.allMarkdownRemark.nodes
+ const posts = data.allMdx.nodes
次に、GraphSQLクエリを変更します.// src/pages/index.js
export const pageQuery = graphql`
query {
site {
siteMetadata {
title
}
}
- allMarkdownRemark(sort: { fields: [frontmatter___date], order: DESC }) {
+ allMdx(sort: { fields: [frontmatter___date], order: DESC }) {
nodes {
excerpt
fields {
slug
}
frontmatter {
date(formatString: "MMMM DD, YYYY")
title
description
}
}
}
}
`
ページの使用方法allMarkdownRemark
そしてallMdx
.ファイル拡張子の更新
我々は何も持っていないので
.mdx
ファイルは、両方を受け入れるためにギャツビーに言いましょう.md
and .mdx
エクステンション、我々はまだ我々の既存を使用することができます.md
ファイル.インgatsby-config.js
追加するextensions
オプションgatsby-plugin-mdx
拡張子の配列を渡します.// gatsby-config.js
{
resolve: `gatsby-plugin-mdx`,
options: {
+ extensions: [`.md`, `.mdx`],
// Other options
},
},
今ちょうどあなたがヒットする必要がありますgatsby develop
そして、あなたの素晴らしいを参照してくださいMDXブログアップ.
エラーの修正
を、おそらく動作しませんでした.それで、私が直面した若干の誤りは、ここにあります、そして
どのように私はそれらを修正しました.
1グラムエラー
あなたはおそらく上記の手順のいずれかを逃した.もう一度それを通過し、何を逃したを見つける.また、すべてのGraphSQLクエリが有効かどうかを確認します.
2 .エラー: mdbount問題:予期しない問題- txnは中止すべきです
を変更してください
createSchemaCustomization
使うMdx
の代わりにMarkdownRemark
. これがうまくいかない場合は、gatsbyキャッシュをクリアしてみてください.gatsby clean
私の場合、その問題はまだ固執していたのでnpm
キャッシュ.npm cache clean --force
3 .不明:未終了のJSXコンテンツ。
JSXが有効であることを確認してください.以下に注意してください.
class
属性className
. <img/>
and <br/>
タグは自己閉鎖です.エラー: EPERM :許可されていない操作
走ってみる
gatsby clean
開発サーバーを設定する前にgatsby develop
. 結論
そして、それ!私たちはMDXのブログをアップロードして実行した.エンター
gatsby develop
そして、あなたのブランドの新しいmdxブログを見てください.今すぐあなたのすべての反応コンポーネントを使用することができます.mdx
ファイル.ハッピーブログ!Reference
この問題について(MatxへのGatsby remarkブログの移行), 我々は、より多くの情報をここで見つけました https://dev.to/mmz001/migrating-gatsby-remark-blog-to-mdx-59ocテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol