노션 블로그에 giscus 추가하기

노션 블로그에 giscus 추가하기

생성일
Sep 16, 2024 05:22 PM
상위 항목
최종 편집 일시
Last updated October 15, 2024
태그
DEV
FE
next.js
하위 항목
다른 분들 노션 블로그를 보니 Giscus를 활용해서 댓글을 다는 게 좋아보였다.
나도 바로 추가해보았다.
React를 잘 몰라서 어떻게 할까 했는데 역시나 PR을 찾아보니 누군가 시도해 놓았다.
열심히 가서 배껴왔다.
개꿀이다!
 

giscus 라이브러리 추가하기

yarn add @giscus/react
해주면 된다.
PR에는 rss도 추가가 되어있어서 왜인지는 모르겠지만 나도 추가해줬다.
yarn add rss
 

PageFooter.tsx 만들기

각 노션 게시물마다 푸터처럼 들어가야 하기 때문에 페이지마다 들어갈 컴포넌트인 PageFooter를 만들어준다.
import * as React from 'react' import Giscus from '@giscus/react'; import * as config from '@/lib/config' import styles from './styles.module.css' export const PageFooter: React.FC<{ isBlogPost: boolean }> = ({ isBlogPost }) => { // only display comments and page actions on blog post pages if (isBlogPost) { return ( config.giscusRepo && (<div className={styles.comments}> <Giscus id="comments" repo={config.giscusRepo} repoId={config.giscusRepoId} category={config.giscusCategory} categoryId={config.giscusCategoryId} mapping="title" reactionsEnabled="1" emitMetadata="0" inputPosition="bottom" theme="preferred_color_scheme" lang="en" loading="lazy" /> </div>) ); } return null }
giscus 앱 설정을 미리 해두지 않았다면 아래 블로그 글을 참고하여 먼저 설정을 완료해두자.
 

site.config.ts 수정하기

giscus 앱을 설정을 완료하면 설정페이지를 통해서 위 <Giscus> 안의 프롭에 채워넣을 값들을 알 수 있다.
원래는 값을 하드코딩하지 않고 site.config.js에 넣어서 값을 사용하게 되어있다.
https://giscus.app/ko giscus 설정이 완료된 상태에서 위 URL에 들어가보면 아래와 같은 부분이 있다.
notion image
여기서 data-repo, datarepo-id, data-category, data-category-id 값들을 잘 복붙해서 site.config.ts에 추가해 주어야 한다.
//site.config.ts navigationStyle: 'default', // navigationStyle: 'custom', // navigationLinks: [ // { // title: 'About', // pageId: 'f1199d37579b41cbabfc0b5174f4256a' // }, // { // title: 'Contact', // pageId: '6a29ebcb935a4f0689fe661ab5f3b8d1' // } // ] // giscus configuration (optional) giscusRepo: 'data-repo 값 넣기', giscusRepoId: 'data-repo-id 값 넣기', giscusCategory: 'data-category 값 넣기', giscusCategoryId: 'data-category-id 값 넣기' })
 

NotionPage.tsx 수정하기

NotionPage 컴포넌트가 노션 페이지 게시글을 컨트롤하는 부분이다.
여기에 이제 우리가 새로 만든 PageFooter 컴포넌트를 바닥에 넣어줘야 한다.
 
// NotionPage.tsx import { Page404 } from './Page404' import { PageAside } from './PageAside' import { PageHead } from './PageHead' import { PageFooter } from './PageFooter' // 이 줄 추가 import styles from './styles.module.css' --------------------------- // const footer 위에 아래 내용 추가 const pageFooter = React.useMemo( () => ( <PageFooter isBlogPost={isBlogPost} /> ), [isBlogPost] ) ------------------------------ // return () 안의 <NotionRenderer> 안에 아래 추가 mapImageUrl={mapImageUrl} searchNotion={config.isSearchEnabled ? searchNotion : null} pageAside={pageAside} pageFooter={pageFooter} // 이 줄 추가 footer={footer} />
 

lib/config.ts 수정

// lib/config.ts // import 부분에 아래 내용 추가 import { Repo } from '@giscus/react' // social accounts 설정값 아래 부분에 아래 내용 추가 // giscus config export const giscusRepo: Repo | null = getSiteConfig('giscusRepo', null) export const giscusRepoId: string | null = getSiteConfig('giscusRepoId', null) export const giscusCategory: string | null = getSiteConfig('giscusCategory', null) export const giscusCategoryId: string | null = getSiteConfig('giscusCategoryId', null)
 

lib/site-config.ts 수정

// lib/site-config.ts // navigationLinks? 아래에 추가 giscusRepo?: Repo giscusRepoId?: string giscusCategory?: string giscusCategoryId?: string
 

package.json 수정

원래 레포의 버전보다 높아진 것들이 몇 개 있었다. 따라서 수정해주었다.
rss, @giscus/react는 yarn add 로 처리했으니 신경안써도 된다.
notion-client, notion-types, notion-utils, react-notion-x가 원래 ^6.15.8인가 그랬는데 ^6.16.0 으로 올라갔다. 뭔가 이유가 있으니 올렸을 거라 생각하고 나도 올려줬다.
//package.json에서 찾기해서 숫자를 바꿔준다. "notion-client": "^6.16.0", "notion-types": "^6.16.0", "notion-utils": "^6.16.0", "react-notion-x": "^6.16.0",
그리고 package.json을 수정했으니 yarn install 해주면 된다.
 
notion image
 
짜잔 이렇게 댓글창이 추가된 것을 볼 수 있다.
와 참 쉬웠다 그죠?