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 키 생성
- Go to
- Navigate to the section DEV Community API Keys
- Add a project name and generate your API Key
Gatsby 사이트 구성
Create a new Gatsby site:
gatsby new mysite
cd ./mysite
모든 종속성을 설치합니다.
npm i
dotenv
및 gatsby-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 탐색기에
myDev
및 allMyDev
가 표시됩니다.
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 .
내 게시물이 마음에 들면 나를 팔로우하고 !
Reference
이 문제에 관하여(Gatsby 사이트에 DEV 게시물을 쉽게 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/basilebong/easily-add-your-dev-posts-to-any-gatsby-site-3fhe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)