Gatsby 사이트에 DEV 게시물을 쉽게 추가

지난 주에 저는 gatsby-source-mydev라는 Gatsby 소스 플러그인을 만들었습니다. 이 플러그인은 DEV 베타 API 끝점을 사용하여 Gatsby 사이트와 DEV 계정 간의 기본 통합입니다.

현재는 모든 기사만 검색하지만 이 소스 플러그인은 DEV API에 따라 발전하고 성장할 것입니다.

Gatsby 사이트 내에서 이 소스 플러그인을 사용하는 방법을 단계별로 보여드리겠습니다.


바실레봉 / 개츠비-소스-mydev


gatsby 사이트에 dev.to 게시물을 추가하세요!





gatsby 사이트에 dev.to 게시물을 추가하세요!

설치


npm i gatsby-source-mydev

사용하는 방법

// In your gatsby-config.js
module.exports = {
  plugins: [
    {
      resolve: `gatsby-source-mydev`,
      options: {
        apiKey: `myApiKey15535186`,
      },
    },
  ],
}

Note: It is recommended to use a .env file to store the API key.

쿼리 방법

query MyQuery {
  allMyDev {
    nodes {
      article {
        slug
        body_markdown
        canonical_url
        cover_image
        comments_count
        description
        id
        page_views_count
        path
        public_reactions_count
        positive_reactions_count
        published
        published_at
        published_timestamp
        tag_list
        title
        type_of
        url
        user {
          github_username
          name
          profile_image
          twitter_username
          profile_image_90
          username
          website_url
        }
      }
    }
  }
}

추가 정보

작가




API 키 생성

  1. Go to
  2. Navigate to the section DEV Community API Keys
  3. Add a project name and generate your API Key

Gatsby 사이트 구성

Create a new Gatsby site:

gatsby new mysite
cd ./mysite


모든 종속성을 설치합니다.

npm i

dotenvgatsby-source-mydev 설치:

npm i -S dotenv gatsby-source-mydev


프로젝트의 루트에 .env 파일을 만듭니다.

touch .env

.env를 편집하고 다음 줄을 추가합니다.MYAPIKEYXXXXX를 API 키로 바꿉니다.

DEV_API_KEY=MYAPIKEYXXXXX


편집gatsby-config.js:

// In your gatsby-config.js
require('dotenv').config();

module.exports = {
  plugins: [
    // ...
    {
      resolve: `gatsby-source-mydev`,
      options: {
        apiKey: process.env.DEV_API_KEY,
      },
    },
  ],
}


Gatsby 사이트를 실행하고 http://localhost:8000/___graphql으로 이동합니다.

npm start


GraphQL 탐색기에 myDevallMyDev 가 표시됩니다.

Note: Your .env file should always be in .gitignore then it contains confidetial information that should not be comitted.



각 기사에 대한 페이지 만들기



템플릿 파일을 만듭니다.

touch src/templates/blog.js


설치react-markdown:

npm i -S react-markdown


편집src/templates/blog.js:

import React from "react"
import ReactMarkdown from "react-markdown"

import Layout from "../components/layout"
import SEO from "../components/seo"

export default function Template({
  pageContext, // this prop will be injected by the GraphQL query below.
}) {
  const { article } = pageContext // data holds your post data
  return (
    <Layout>
        <SEO title={article.title} />
        <div className="blog-post-container">
            <div className="blog-post">
                <h1>{article.title}</h1>
                <h2>{article.published_at}</h2>
                <ReactMarkdown>{article.body_markdown}</ReactMarkdown>
            </div>
        </div>
    </Layout>
  )
}


편집gatsby-node.js:

/**
 * Implement Gatsby's Node APIs in this file.
 *
 * See: https://www.gatsbyjs.com/docs/node-apis/
 */

// You can delete this file if you're not using it

exports.createPages = async ({ actions, graphql, reporter }) => {
    const { createPage } = actions
    const blogPostTemplate = require.resolve(`./src/templates/blog.js`)
    const result = await graphql(`
        query {
            allMyDev {
            nodes {
                article {
                body_markdown
                canonical_url
                comments_count
                cover_image
                description
                id
                page_views_count
                path
                positive_reactions_count
                public_reactions_count
                published
                published_at
                published_timestamp
                slug
                tag_list
                title
                type_of
                url
                user {
                    github_username
                    name
                    profile_image
                    profile_image_90
                    twitter_username
                    username
                    website_url
                }
                }
            }
            }
      }
    `)
    // Handle errors
    if (result.errors) {
      reporter.panicOnBuild(`Error while running GraphQL query.`)
      return
    }
    result.data.allMyDev.nodes.forEach(({ article }) => {
      createPage({
        path: `blog/${article.slug}`,
        component: blogPostTemplate,
        context: {
            article: article
        },
      })
    })
}


잘했어, 해냈어! 이제 http://localhost:8000/blog/article-slug으로 이동하면 DEV 기사의 내용이 표시됩니다.

Note: Replace article-slug by the slug of an article. The easiest way to find an article's slug is to go to your dev.to article and to copy paste the end of the url:



블로그 페이지 목록 작성은 여러분에게 맡기겠습니다.


도움이 필요하거나 새로운 기능에 대한 아이디어가 있습니까? 문제 열기here .

내 게시물이 마음에 들면 나를 팔로우하고 !

좋은 웹페이지 즐겨찾기