읽기 시간 추가
Markdown 또는 MDX 파일의 프런트매터에 읽기 시간 속성을 추가하는 remark 플러그인을 만듭니다. 이 속성을 사용하여 각 페이지의 읽기 시간을 표시합니다.
레시피
섹션 제목: 레시피- 도우미 패키지 설치
다음 두 개의 도우미 패키지를 설치하세요.
- 읽은 시간 (분)을 계산하는
reading-time
- Markdown에서 모든 텍스트를 추출하는
mdast-util-to-string
npm install reading-time mdast-util-to-string
pnpm add reading-time mdast-util-to-string
yarn add reading-time mdast-util-to-string
- remark 플러그인 생성.
이 플러그인은 mdast-util-to-string
패키지를 사용하여 Markdown 파일의 텍스트를 가져옵니다. 그런 다음 이 텍스트는 reading-time
패키지로 전달되어 읽기 시간 (분)을 계산합니다.
import getReadingTime from 'reading-time';import { toString } from 'mdast-util-to-string';
export function remarkReadingTime() { return function (tree, { data }) { const textOnPage = toString(tree); const readingTime = getReadingTime(textOnPage); // readingTime.text는 친숙한 문자열로 읽은 시간을 제공합니다. // 예: "3 min read" data.astro.frontmatter.minutesRead = readingTime.text; };}
- 구성에 플러그인을 추가하세요.
import { defineConfig } from 'astro/config';import { remarkReadingTime } from './remark-reading-time.mjs';
export default defineConfig({ markdown: { remarkPlugins: [remarkReadingTime], },});
이제 모든 Markdown 문서의 프런트매터에는 계산된 minutesRead
속성이 있습니다.
- 읽기 시간 표시
만약 블로그 게시물이 콘텐츠 컬렉션에 저장되어 있다면, entry.render()
함수의 remarkPluginFrontmatter
에 액세스하세요. 그런 다음 템플릿에서 표시하려는 위치마다 minutesRead
를 렌더링하세요.
---import { CollectionEntry, getCollection } from 'astro:content';
export async function getStaticPaths() { const blog = await getCollection('blog'); return blog.map(entry => ({ params: { slug: entry.slug }, props: { entry }, }));}
const { entry } = Astro.props;const { Content, remarkPluginFrontmatter } = await entry.render();---
<html> <head>...</head> <body> ... <p>{remarkPluginFrontmatter.minutesRead}</p> ... </body></html>
Markdown 레이아웃을 사용하는 경우 레이아웃 템플릿에서 Astro.props
의 minutesRead
frontmatter 속성을 사용하세요.
---const { minutesRead } = Astro.props.frontmatter;---
<html> <head>...</head> <body> <p>{minutesRead}</p> <slot /> </body></html>