읽기 시간 추가
Markdown 또는 MDX 파일의 프런트매터에 읽기 시간 속성을 추가하는 mdast 플러그인을 만듭니다. 이 속성을 사용하여 각 페이지의 읽기 시간을 표시합니다.
레시피
섹션 제목: “레시피”-
사용하는 Markdown 프로세서에 따라 다음 패키지를 설치합니다.
- 읽는 데 걸리는 시간을 계산하기 위한
reading-time satteri()프로세서를 구성하기 위한@astrojs/markdown-satteri- Sätteri
mdast플러그인을 만들기 위한satteri
터미널 창 npm install reading-time @astrojs/markdown-satteri satteri터미널 창 pnpm add reading-time @astrojs/markdown-satteri satteri터미널 창 yarn add reading-time @astrojs/markdown-satteri satteri- 읽는 데 걸리는 시간을 계산하기 위한
reading-time - Markdown의 모든 텍스트를 추출하기 위한
mdast-util-to-string unified()프로세서를 사용하기 위한@astrojs/markdown-remark
터미널 창 npm install reading-time mdast-util-to-string @astrojs/markdown-remark터미널 창 pnpm add reading-time mdast-util-to-string @astrojs/markdown-remark터미널 창 yarn add reading-time mdast-util-to-string @astrojs/markdown-remark - 읽는 데 걸리는 시간을 계산하기 위한
-
mdast 플러그인을 만듭니다.
이 플러그인은 Markdown 파일의 텍스트를 가져옵니다. 그런 다음 이 텍스트를
reading-time패키지에 전달하여 분 단위로 읽기 시간을 계산합니다.src/mdast/mdast-reading-time.ts import getReadingTime from "reading-time";import { defineMdastPlugin } from "satteri";export const mdastReadingTimePlugin = defineMdastPlugin({name: "mdast-reading-time",after(root, context) {const textOnPage = context.textContent(root);const readingTime = getReadingTime(textOnPage);if (context.data.astro !== undefined) {// readingTime.text는 읽기 시간을 이해하기 쉬운 문자열로 제공합니다.// 예: "3 min read"context.data.astro.frontmatter.minutesRead = readingTime.text;}},});remark-reading-time.mjs 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;};} -
구성에 플러그인을 추가합니다.
astro.config.mjs import { satteri } from "@astrojs/markdown-satteri";import { defineConfig } from "astro/config";import { mdastReadingTimePlugin } from "./src/mdast/mdast-reading-time";export default defineConfig({markdown: {processor: satteri({mdastPlugins: [mdastReadingTimePlugin],}),},});astro.config.mjs import { unified } from "@astrojs/markdown-remark";import { defineConfig } from "astro/config";import { remarkReadingTime } from "./remark-reading-time.mjs";export default defineConfig({markdown: {processor: unified({remarkPlugins: [remarkReadingTime],}),},});이제 모든 Markdown 문서의 프런트매터에 계산된
minutesRead속성이 포함됩니다. -
읽기 시간을 표시합니다.
블로그 게시물이 콘텐츠 컬렉션에 저장된 경우
render()함수에서remarkPluginFrontmatter에 액세스하세요. 그런 다음 템플릿에서 원하는 위치에minutesRead를 렌더링하세요.src/pages/posts/[slug].astro ---import { getCollection, render } from "astro:content";export async function getStaticPaths() {const blog = await getCollection("blog");return blog.map((entry) => ({params: { slug: entry.id },props: { entry },}));}const { entry } = Astro.props;const { Content, remarkPluginFrontmatter } = await render(entry);---<html><head><meta charset="utf-8" /><title>{entry.data.title}</title></head><body><title>{entry.data.title}</title><p>{remarkPluginFrontmatter.minutesRead}</p><Content /></body></html>Markdown 레이아웃을 사용하는 경우 레이아웃 템플릿에서
Astro.props의minutesRead프런트매터 속성을 사용하세요.src/layouts/BlogLayout.astro ---const { minutesRead } = Astro.props.frontmatter;---<html><head><meta charset="utf-8" /></head><body><p>{minutesRead}</p><slot /></body></html>