게이츠비-가격 인하에서 MDX로 전환
10525 단어 reactmdxjavascriptgatsby
이 템플릿은 상자를 열면 바로 사용할 수 있는 게이츠비 방법을 사용하는데, 단지 간단한 표기 파일일 뿐이다.제 댓글과 구성 요소를 강화하기 위해서 MDX로 전환해야 합니다.
변화를 꾀하다🎉
게이츠비에서 MDX를 사용하려면 여러 개의 다른 가방이 필요합니다.우선 그것들을 설치해라.
npm install --save @mdx-js/mdx @mdx-js/react gatsby-plugin-feed-mdx gatsby-plugin-mdx
게이츠비 플러그인 MDX
gatsby-config.js
에서 내보내기 부분을 gatsby-transofrmer-remark
에서 gatsby-plugin-mdx
로 변경합니다.이것은 게이츠비에게 MDX 플러그인을 사용하고 일반적인 태그 파일을 처리하기 위해transformer를 사용하지 말라고 알려 줍니다.plugins
노드의 이름을 gatsbyRemarkPlugins
로 바꾸고 이전 플러그인을 보존합니다(한두 가지 예외가 있지만 뒤에 설명하겠습니다).플러그인을 MDX 및 MD와 함께 사용하고 이미 가지고 있는 템플릿을 사용하려고 합니다. extensions: [`.mdx`, `.md`],
defaultLayouts: {
posts: require.resolve('./src/templates/PostTemplate.js'),
page: require.resolve('./src/templates/PageTemplate.js'),
tags: require.resolve('./src/templates/TagTemplate.js'),
},
Gatbsy 플러그인 소스 MDX
만약 RSS 요약을 발표하는 설정이 있다면, 이 가방으로 전환해야 합니다. 이것은 우리가 이름을 바꾸어야 할 또 다른 플러그인
gatsby-config.js
입니다.요약 조회를 allMarkdownRemark
에서 allMdx
로 조정합니다.- serialize: ({ query: { site, allMarkdownRemark } }) => {
- return allMarkdownRemark.edges.map(edge => {
+ serialize: ({ query: { site, allMdx } }) => {
+ return allMdx.edges.map(edge => {
모든 질의 변경
우리는 사이트 내의 모든 조회에 대해 상술한 변경을 진행해야 한다.
markdownRemark
에 대한 쿼리가 있는 경우 MDX 버전은 mdx
에 불과합니다.좀 지루할 수도 있지만 걱정하지 마세요. 상황이 그렇게 나쁘지는 않아요.- posts: allMarkdownRemark(
+ posts: allMdx(
- page: markdownRemark(fields: { slug: { eq: $slug } }) {
+ page: mdx(fields: { slug: { eq: $slug } }) {
id
- html
+ body
구성 요소 및 도구 교체
모든 검색이 업데이트되었으니, 업데이트된 검색 결과를 구성 요소에 전달하고, 도구에서 올바르게 업데이트될 수 있도록 해야 합니다.다음은 이 변화의 예입니다. 제가 사용한 템플릿에 첨부된
BodyText
구성 요소입니다.MDX
dangerouslySetInnerHTML
와 함께 사용하는 대신 이 구성 요소를 사용해야 합니다.내가 필요로 하는 일에 대해 GraphQL 조회를 되돌려주는 body
를 구성 요소에 포장하면 MDX 내용을 보여 줍니다.import { MDXRenderer } from 'gatsby-plugin-mdx'
구성 요소의 아이템을 body
대신 html
변경하기- const { html, theme } = props
+ const { body, theme } = props
MDXRenderer
구성 요소를 사용하여 결과를 페이지에 표시합니다.- <div className="bodytext" dangerouslySetInnerHTML={{ __html: html }} />
+ <div className="bodytext">
+ <MDXRenderer>{body}</MDXRenderer>
+ </div>
구성 요소의 propTypes를 html
에서 body
로 변경합니다.- html: PropTypes.string.isRequired,
+ body: PropTypes.string.isRequired,
구성 요소에 따라 이와 유사한 변경 사항을 적용하기만 하면, 나는 짧은 시간 안에 모든 구성 요소를 업데이트할 수 있다.이전 패키지 제거
이 모든 변경 사항을 한 후에, 게이츠비 페이지를 MDX로 시작하고 실행할 수 있을 것입니다.필요한 경우 모든 이전 MD를 MDX로 변환할 수 있습니다. 그렇지 않으면 확장 옵션을 그대로 두어야 합니다.이제 더 이상 사용하지 않는 패키지를 삭제할 때가 되었다.
npm uninstall gatsby-plugin-feed gatsby-transformer-remark
고차스
이 과정에서 나는 작은 문제에 부딪혔다. 아마도 내가 일을 안배하는 방식이 특유한 것일 것이다. 그러나 나는 여기서 그것들을 말하고 싶다.
MDX는 코드 블록 구문을 강조 표시하지 않습니다.
전환하기 전에 MDX가 코드 블록을 직접 보여주지 않는다는 것을 몰랐습니다.그러나 이 문제를 처리할 수 있는 몇 가지 옵션이 있습니다. 저는 PRISMJ를 추가했고 그 중 하나인 CSS 파일을 사용해서 블록의 외관을 처리했습니다.궁금하시다면
gatsby-remark-prismjs
plugin를 보시기를 강력히 권장합니다.Jest 스냅샷 테스트가 중지됨
기존의 Jest 스냅샷 테스트가 있는데, 테스트는 문장 구성 요소입니다. 이 구성 요소는 제목, 주체, 스타일이 있습니다.전환 후 테스트의 주체 부분이 실패하기 시작했습니다. 무시하기 위해jest 설정에 exclude를 포함해야 합니다.
gatsby-plugin-mdx
그것은 Jest가 생각하지 못했던 것들을 미리 설치했다.- transformIgnorePatterns: [`node_modules/(?!(gatsby)/)`],
+ transformIgnorePatterns: ['node_modules/(?!(gatsby|gatsby-plugin-mdx)/)'],
만약 네가 게이츠비에서 MDX를 사용하기로 바뀌었다면, 나는 너의 경력이 어떠한지 궁금할 것이다.만약 저와 같은 문제가 발생하거나, 코드 블록 렌더링을 처리하기 위해 다른 패키지/해결 방안을 사용하셨다면.
Reference
이 문제에 관하여(게이츠비-가격 인하에서 MDX로 전환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/chrisotto/gatsby-switching-from-markdown-to-mdx-455i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)