notion-to-md npm 모듈을 사용해서 Notion 페이지를 마크다운으로 변경할 수 있다. notion-to-md
모듈과 @notionhq/client
모듈이 필요하다. 그리고 Notion API key
와 페이지 ID
도 필요하다. 변환한 마크다운은 toMarkdownString
함수로 문자열로 변환할 수 있다.
const { Client } = require('@notionhq/client');
const { NotionToMarkdown } = require('notion-to-md');
const notion = new Client({ auth: NOTION_KEY });
const n2m = new NotionToMarkdown({ notionClient: notion });
const pageId = PAGE_ID;
(async () => {
const mdblocks = await n2m.pageToMarkdown(pageId);
const mdString = n2m.toMarkdownString(mdblocks);
console.log(mdString);
})();
react-markdown npm 모듈을 사용해서 간단하게 변환할 수 있다.
import ReactMarkdown from 'react-markdown';
export default function NotionMD({ markdown }) {
return (
<ReactMarkdown>
{markdown}
</ReactMarkdown>
);
}
제목은 Notion-to-MD에서 제공하지 않으므로, 다른 방법으로 가져와야 한다. @notionhq/client 를 사용해서 가져온다. (참고로, @notionhq/client 모듈은 타입스크립트 지원이 후지다. 선언된 타입들이 많이 잘못되어 있으므로, any로 변환해서 사용한다.)
async function getPageTitle(pageID: string) {
if (isDev()) {
const title = getNotionPageTitleMock(pageID);
if (title) return title;
}
const { properties } = (await notion.pages.retrieve({ page_id: pageID })) as any;
return properties[properties['title'] ? 'title' : '이름'].title[0].plain_text;
}
‘title’, ‘이름’
을 확인하는 이유 : notion 사용자의 언어설정에 따라 다르게 설정되어 확인 후 사용한다.pnpm add encoding
)