GatsbyJS에서 마크다운 파일을 분리하기 위해 frontmatter를 사용하지 마세요. 파일 시스템을 사용하세요.
10501 단어 graphqlgatsbytutorialjavascript
소개
Gatsby에서 마크다운 파일을 frontmatter 필드보다 더 의미 있는 방식으로 분리하는 방법을 안내해 드리겠습니다.
Markdown 분할이 일반적으로 수행되는 방법
가장 오랫동안 게시물과 페이지 유형 간의 차이를 지정하기 위해 머리말 필드와 같은 솔루션을 사용해야 했습니다.
내가 배우기 전에 어떤 마크다운 파일이 페이지인지 게시물인지 알도록 GraphQL에 지시할 수 있었습니다. 내 머리말은 다음과 같습니다.
---
title: 'How to be productive as a programmer with ADHD'
date: '2020-06-19'
published: true
tags: ['adhd', 'productivity']
coverImage: cover.jpg
type: article
description: Being productive while having ADHD can sometimes feel like a colossal task.
---
게시물이나 기사만 필터링할 수 있도록
type: article
를 사용합니다.왜 나쁜가
게시물이 누락된 이유를 파악하지 않고 콘텐츠 작성에 집중할 수 있도록 블로그에서 기사를 생성하는 방법을 단순화하고 싶었습니다.
그리고 나는 이미 다음과 같은 폴더 구조를 가지고 있습니다.
GatsbyJS가 마크다운 파일이 폴더에 기반한 페이지인지 블로그 게시물인지 알 수 있다면 좋지 않을까요?
그것은 나에게 더 의미가 있습니다.
전제 조건
gatsby-source-filesystem
가 설치되어 있어야 합니다.gatsby-transform-remark
또는 gatsby-plugin-mdx
를 사용하는 경우 이미 설치되어 있을 것입니다. 👍1단계 - 폴더 구조 만들기
사용할 폴더 구조를 만듭니다.
나는 게시물을 내 코드에서 분리하는 것을 좋아하므로 다음과 같이 내 게시물을 루트 수준에 배치합니다
project-folder/content
.이것이 내가 사용할 폴더 구조입니다.
📂 content
├── 📂 blog
│ ├── 📂 hello-world
│ │ ├── 📄 index.md
│ │ └── 🖼 salty\_egg.jpg
│ ├── 📂 my-second-post
│ │ └── 📄 index.md
│ └── 📂 new-beginnings
│ └── 📄 index.md
└── 📂 pages
├── 📂 about
│ ├── 📄 index.md
│ └── 🖼 profile-pic.jpg
└── 📂 now
└── 📄 now.md
각 페이지 또는 블로그 게시물에는 자체 폴더가 있습니다. 이를 통해 정리가 필요한 이미지나 파일을 쉽게 보관할 수 있습니다.
2단계 - Gatsby에서 파일 시스템 설정
없는 경우
gatsby-source-filesystem
를 설치하십시오.
yarn add gatsby-source-filesystem
Gatsby Source File System을 사용하여 폴더를 분리할 것입니다.
이렇게 하려면 먼저
gatsby-source-filesystem
를 gatsby.config.js
에 플러그인으로 추가합니다. 이미 추가했을 수도 있습니다.분리하려는 각 유형의 콘텐츠에 대해 이름 및 경로와 함께 새 gatsby 소스 파일 시스템 개체를 추가합니다.
우리의 경우 게시물과 페이지를 분리하고 싶기 때문에 2개의 섹션이 필요합니다.
다음과 같아야 합니다.
plugins: [
{
resolve: `gatsby-source-filesystem`,
options: {
path: `${\_\_dirname}/content/blog`,
name: `blog`,
},
},
{
resolve: `gatsby-source-filesystem`,
options: {
path: `${\_\_dirname}/content/pages`,
name: `page`,
},
},
...
}
3단계 - Gatsby 구성 업데이트
gatsby-node.js
에서 이 코드를 onCreateNode
에 추가합니다.
exports.onCreateNode = ({ node, getNode, actions }) => {
const { createNodeField } = actions;
if (node.internal.type === `MarkdownRemark`) {
const parent = getNode(node.parent);
let collection = parent.sourceInstanceName;
createNodeField({
node,
name: 'collection',
value: collection,
});
}
};
MDX를 사용하는 경우
allMarkdownRemark
를 Mdx
로 바꾸십시오.먼저 편집 중인 노드가 마크다운 파일인지 확인하고 추가 정보에 액세스할 수 있도록 상위 노드를 가져옵니다.
sourceInstanceName
는 마지막 단계에서 설정한 필드gatsby-source-filesystem
입니다.allMarkdownRemark
단독으로는 사용할 수 있는 이 필드가 없으므로 부모로부터 가져와야 합니다.그런 다음 그것이 속한 컬렉션의 마크다운 노드에
field
를 추가합니다.4단계 - 분리를 시작하자
이제 gatsby에 필터를 전달하여 액세스하려는 컬렉션을 알릴 수 있습니다. 만세! 더 이상 머리말 유형 없음
query {
allMdx(
sort: { fields: [frontmatter\_\_\_date], order: DESC }
filter: { fields: { collection: { eq: "posts" } } }
) {
edges {
node {
id
fields {
slug
}
frontmatter {
title
published
slug
date(formatString: "MMMM DD, YYYY")
}
excerpt(pruneLength: 280)
}
}
}
}
마무리
들러 주셔서 감사합니다! 이것은 내가 GatsbyJS와 관련된 문제를 해결하기 위해 만든 빠른 자습서였습니다. 이 글은 저의 "한달에 블로그 글 하나 쓰기"챌린지의 일부입니다.
이와 같은 더 많은 자습서를 보고 싶으면 에서 또는 내 .
또한 Gatsby의 장점을 더 원한다면 Josh W Comeau을 확인하는 것이 좋습니다. darkmode에 대한 그의 튜토리얼은 내 사이트에 추가하도록 영감을 주었습니다.
Reference
이 문제에 관하여(GatsbyJS에서 마크다운 파일을 분리하기 위해 frontmatter를 사용하지 마세요. 파일 시스템을 사용하세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/george/don-t-use-frontmatter-to-seperate-your-markdown-files-in-gatsbyjs-use-the-file-system-39jn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)