본문으둜 κ±΄λ„ˆλ›°κΈ°
버전: Canary 🚧

πŸ“¦ plugin-content-blog

λΈ”λ‘œκ·Έ λ§Œλ“€κΈ° κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” λ„νμ‚¬μš°λ£¨μŠ€μ˜ κΈ°λ³Έ λΈ”λ‘œκ·Έ ν”ŒλŸ¬κ·ΈμΈμž…λ‹ˆλ‹€.

some features production only

ν”Όλ“œ κΈ°λŠ₯은 λΉŒλ“œ μ‚°μΆœλ¬Όμ—μ„œλ§Œ μž‘λ™ν•˜λ©° μ œν’ˆ λ²„μ „μ—μ„œλ§Œ ν™œμ„±ν™”λ©λ‹ˆλ‹€.

μ„€μΉ˜β€‹

npm install --save @docusaurus/plugin-content-blog
팁

@docusaurus/preset-classic을 μ„€μΉ˜ν•œ κ²½μš°μ—λŠ” ν”ŒλŸ¬κ·ΈμΈμ„ λ”°λ‘œ μ„€μΉ˜ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

프리셋 μ˜΅μ…˜μ—μ„œ ν”ŒλŸ¬κ·ΈμΈμ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

섀정​

μ„€μ •ν•  수 μžˆλŠ” ν•„λ“œ

μ˜΅μ…˜λͺ…νƒ€μž…κΈ°λ³Έκ°’μ„€λͺ…
pathstring'blog'μ‚¬μ΄νŠΈ 디렉토리에 μƒλŒ€μ μΈ 파일 μ‹œμŠ€ν…œμ˜ λΈ”λ‘œκ·Έ μ½˜ν…μΈ  디렉토리 κ²½λ‘œμž…λ‹ˆλ‹€.
editUrlstring | EditUrlFnundefinedμ‚¬μ΄νŠΈλ₯Ό νŽΈμ§‘ν•˜κΈ° μœ„ν•œ Base URLμž…λ‹ˆλ‹€. μ΅œμ’… URL은 editUrl + relativePostPath ν˜•νƒœλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€. μ˜΅μ…˜ μ‚¬μš© μ‹œ 각 νŒŒμΌμ— λŒ€ν•œ μ„Έλ°€ν•œ μ œμ–΄λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή ν•„λ“œλ₯Ό μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ νŽΈμ§‘ 링크가 λΉ„ν™œμ„±ν™”λ©λ‹ˆλ‹€.
editLocalizedFilesbooleanfalseνŽΈμ§‘ URL은 ν˜„μ§€ν™”λ˜μ§€ μ•Šμ€ 원본 파일 λŒ€μ‹  ν˜„μ§€ν™”λœ νŒŒμΌμ„ λŒ€μƒμœΌλ‘œ ν•©λ‹ˆλ‹€. editUrl이 ν•¨μˆ˜μΈ κ²½μš°μ—λŠ” λ¬΄μ‹œν•©λ‹ˆλ‹€.
blogTitlestring'Blog'더 λ‚˜μ€ SEOλ₯Ό μœ„ν•œ λΈ”λ‘œκ·Έ νŽ˜μ΄μ§€ 제λͺ©
blogDescriptionstring'Blog'더 λ‚˜μ€ SEOλ₯Ό μœ„ν•œ λΈ”λ‘œκ·Έ νŽ˜μ΄μ§€ 메타 μ„€λͺ…
blogSidebarCountnumber | 'ALL'5λΈ”λ‘œκ·Έ μ‚¬μ΄λ“œλ°”μ— ν‘œμ‹œν•  λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό μˆ˜μž…λ‹ˆλ‹€. λͺ¨λ“  λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Όμ„ ν‘œμ‹œν•˜λ €λ©΄ 'ALL', 감좔렀면 0
blogSidebarTitlestring'Recent posts'λΈ”λ‘œκ·Έ μ‚¬μ΄λ“œλ°” 제λͺ©
routeBasePathstring'blog'μ‚¬μ΄νŠΈ λΈ”λ‘œκ·Έ μ„Ήμ…˜μ— λŒ€ν•œ URL 라우트 트레일링 μŠ¬λž˜μ‹œλ₯Ό ν¬ν•¨ν•˜μ§€ λ§ˆμ„Έμš”. λΈ”λ‘œκ·Έλ₯Ό 루트 경둜둜 μ„€μ •ν•  λ•Œλ§Œ /λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
tagsBasePathstring'tags'λΈ”λ‘œκ·Έ νƒœκ·Έ μ„Ήμ…˜μ— λŒ€ν•œ URL 라우트 routeBasePath에 μΆ”κ°€λ©λ‹ˆλ‹€. 트레일링 μŠ¬λž˜μ‹œλ₯Ό ν¬ν•¨ν•˜μ§€ λ§ˆμ„Έμš”.
archiveBasePathstring | null'archive'λΈ”λ‘œκ·Έ μ•„μΉ΄μ΄λΈŒ μ„Ήμ…˜μ— λŒ€ν•œ URL 라우트 routeBasePath에 μΆ”κ°€λ©λ‹ˆλ‹€. 트레일링 μŠ¬λž˜μ‹œλ₯Ό ν¬ν•¨ν•˜μ§€ λ§ˆμ„Έμš”. μ•„μΉ΄μ΄λΈŒ 생성을 ν•˜μ§€ μ•ŠμœΌλ €λ©΄ null둜 μ„€μ •ν•©λ‹ˆλ‹€.
includestring[]['**/*.{md,mdx}']μ½˜ν…μΈ  경둜λ₯Ό κΈ°μ€€μœΌλ‘œ λΉŒλ“œν•  λ§ˆν¬λ‹€μš΄ 파일과 μΌμΉ˜ν•˜λŠ” glob νŒ¨ν„΄ λ°°μ—΄μž…λ‹ˆλ‹€.
excludestring[]μ„€μ • μ˜ˆμ‹œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”μ œμ™Έν•  λ§ˆν¬λ‹€μš΄ 파일과 μΌμΉ˜ν•˜λŠ” glob νŒ¨ν„΄ λ°°μ—΄μž…λ‹ˆλ‹€. include μ˜΅μ…˜μ„ μ’€ 더 μ„ΈλΆ„ν™”ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
postsPerPagenumber | 'ALL'10λͺ©λ‘ νŽ˜μ΄μ§€μ—μ„œ νŽ˜μ΄μ§€ λ‹Ή ν‘œμ‹œν•  κ²Œμ‹œλ¬Ό μˆ˜μž…λ‹ˆλ‹€. ν•˜λ‚˜μ˜ λͺ©λ‘ νŽ˜μ΄μ§€μ— λͺ¨λ“  κ²Œμ‹œλ¬Όμ„ ν‘œμ‹œν•˜λ €λ©΄ 'ALL'을 μ„€μ •ν•©λ‹ˆλ‹€.
blogListComponentstring'@theme/BlogListPage'λΈ”λ‘œκ·Έ λͺ©λ‘ νŽ˜μ΄μ§€μ˜ 루트 μ»΄ν¬λ„ŒνŠΈ
blogPostComponentstring'@theme/BlogPostPage'각 λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό νŽ˜μ΄μ§€μ˜ 루트 μ»΄ν¬λ„ŒνŠΈ
blogTagsListComponentstring'@theme/BlogTagsListPage'νƒœκ·Έ λͺ©λ‘ νŽ˜μ΄μ§€μ˜ 루트 μ»΄ν¬λ„ŒνŠΈ
blogTagsPostsComponentstring'@theme/BlogTagsPostsPage'"νƒœκ·Έλ₯Ό ν¬ν•¨ν•œ κ²Œμ‹œλ¬Ό" νŽ˜μ΄μ§€μ˜ 루트 μ»΄ν¬λ„ŒνŠΈ
blogArchiveComponentstring'@theme/BlogArchivePage'λΈ”λ‘œκ·Έ μ•„μΉ΄μ΄λΈŒ νŽ˜μ΄μ§€μ˜ 루트 μ»΄ν¬λ„ŒνŠΈ
remarkPluginsany[][]MDX에 μ „λ‹¬λœ Remark ν”ŒλŸ¬κ·ΈμΈ
rehypePluginsany[][]MDX에 μ „λ‹¬λœ Rehype ν”ŒλŸ¬κ·ΈμΈ
beforeDefaultRemarkPluginsany[][]κΈ°λ³Έ λ„νμ‚¬μš°λ£¨μŠ€ Remark ν”ŒλŸ¬κ·ΈμΈλ³΄λ‹€ λ¨Όμ € MDX에 μ „λ‹¬λœ μ‚¬μš©μž 지정 Remark ν”ŒλŸ¬κ·ΈμΈ
beforeDefaultRehypePluginsany[][]κΈ°λ³Έ λ„νμ‚¬μš°λ£¨μŠ€ Rehype ν”ŒλŸ¬κ·ΈμΈλ³΄λ‹€ λ¨Όμ € MDX에 μ „λ‹¬λœ μ‚¬μš©μž 지정 Rehype ν”ŒλŸ¬κ·ΈμΈ
truncateMarkerRegExp/<!--\s*truncate\s*-->/ \\{\/\*\s*truncate\s*\*\/\}/
showReadingTimebooleantrueλΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Όμ˜ μ˜ˆμƒ 읽기 μ‹œκ°„μ„ ν‘œμ‹œ
readingTimeReadingTimeFnκΈ°λ³Έ 읽기 μ‹œκ°„ν‘œμ‹œλ˜λŠ” 읽기 μ‹œκ°„ 숫자λ₯Ό μ‚¬μš©μž μ§€μ •ν•˜κΈ° μœ„ν•œ 콜백
authorsMapPathstring'authors.yml'λΈ”λ‘œκ·Έ μ½˜ν…μΈ  디렉토리에 μƒλŒ€μ μΈ μž‘μ„±μž 맡 파일 경둜
feedOptionsμ•„λž˜λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.{type: ['rss', 'atom']}λΈ”λ‘œκ·Έ ν”Όλ“œ
feedOptions.typeFeedType | FeedType[] | 'all' | nullν•„μˆ˜μƒμ„±ν•  ν”Όλ“œ μœ ν˜•μž…λ‹ˆλ‹€. 생성을 ν•˜μ§€ μ•ŠμœΌλ €λ©΄ null둜 μ„€μ •ν•©λ‹ˆλ‹€.
feedOptions.createFeedItemsCreateFeedItemsFn | undefinedundefinedν”Όλ“œ ν•­λͺ©μ„ λ³€ν™˜ν•˜κ±°λ‚˜ 필터링할 λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” 선택 κΈ°λŠ₯
feedOptions.limitnumber | null | false20Limits the feed to the specified number of posts, false or null for all entries. Defaults to 20.
feedOptions.titlestringsiteConfig.titleν”Όλ“œ 제λͺ©
feedOptions.descriptionstring`${siteConfig.title} Blog`ν”Όλ“œ μ„€λͺ…
feedOptions.copyrightstringundefinedμ €μž‘κΆŒ 문ꡬ
feedOptions.languagestring (μ‚¬μš©ν•  수 μžˆλŠ” 값은 λ¬Έμ„œλ₯Ό μ°Έκ³ )undefinedν”Όλ“œ μ–Έμ–΄ 메타데이터
sortPosts'descending' | 'ascending' 'descending'λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό μ •λ ¬ μˆœμ„œ μ„€μ •

νƒ€μž…β€‹

EditUrlFn​

type EditUrlFunction = (params: {
blogDirPath: string;
blogPath: string;
permalink: string;
locale: string;
}) => string | undefined;

ReadingTimeFn​

type ReadingTimeOptions = {
wordsPerMinute: number;
wordBound: (char: string) => boolean;
};

type ReadingTimeCalculator = (params: {
content: string;
frontMatter?: BlogPostFrontMatter & Record<string, unknown>;
options?: ReadingTimeOptions;
}) => number;

type ReadingTimeFn = (params: {
content: string;
frontMatter: BlogPostFrontMatter & Record<string, unknown>;
defaultReadingTime: ReadingTimeCalculator;
}) => number | undefined;

FeedType​

type FeedType = 'rss' | 'atom' | 'json';

CreateFeedItemsFn​

type CreateFeedItemsFn = (params: {
blogPosts: BlogPost[];
siteConfig: DocusaurusConfig;
outDir: string;
defaultCreateFeedItemsFn: CreateFeedItemsFn;
}) => Promise<BlogFeedItem[]>;

μ„€μ • μ˜ˆμ‹œβ€‹

프리셋 μ˜΅μ…˜μ΄λ‚˜ ν”ŒλŸ¬κ·ΈμΈ μ˜΅μ…˜μ—μ„œ ν”ŒλŸ¬κ·ΈμΈμ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

팁

λŒ€λΆ€λΆ„μ˜ λ„νμ‚¬μš°λ£¨μŠ€ μ‚¬μš©μžλŠ” 프리셋 μ˜΅μ…˜μ„ μ‚¬μš©ν•΄ ν”ŒλŸ¬κ·ΈμΈμ„ μ„€μ •ν•©λ‹ˆλ‹€.

If you use a preset, configure this plugin through the preset options:

docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
blog: {
path: 'blog',
// Simple use-case: string editUrl
// editUrl: 'https://github.com/facebook/docusaurus/edit/main/website/',
// Advanced use-case: functional editUrl
editUrl: ({locale, blogDirPath, blogPath, permalink}) =>
`https://github.com/facebook/docusaurus/edit/main/website/${blogDirPath}/${blogPath}`,
editLocalizedFiles: false,
blogTitle: 'Blog title',
blogDescription: 'Blog',
blogSidebarCount: 5,
blogSidebarTitle: 'All our posts',
routeBasePath: 'blog',
include: ['**/*.{md,mdx}'],
exclude: [
'**/_*.{js,jsx,ts,tsx,md,mdx}',
'**/_*/**',
'**/*.test.{js,jsx,ts,tsx}',
'**/__tests__/**',
],
postsPerPage: 10,
blogListComponent: '@theme/BlogListPage',
blogPostComponent: '@theme/BlogPostPage',
blogTagsListComponent: '@theme/BlogTagsListPage',
blogTagsPostsComponent: '@theme/BlogTagsPostsPage',
remarkPlugins: [require('./my-remark-plugin')],
rehypePlugins: [],
beforeDefaultRemarkPlugins: [],
beforeDefaultRehypePlugins: [],
truncateMarker: /<!--\s*(truncate)\s*-->/,
showReadingTime: true,
feedOptions: {
type: '',
title: '',
description: '',
copyright: '',
language: undefined,
createFeedItems: async (params) => {
const {blogPosts, defaultCreateFeedItems, ...rest} = params;
return defaultCreateFeedItems({
// keep only the 10 most recent blog posts in the feed
blogPosts: blogPosts.filter((item, index) => index < 10),
...rest,
});
},
},
},
},
],
],
};

λ§ˆν¬λ‹€μš΄ ν”„λŸ°νŠΈ 맀터​

Markdown documents can use the following Markdown front matter metadata fields, enclosed by a line --- on either side.

μ„€μ •ν•  수 μžˆλŠ” ν•„λ“œ

μ˜΅μ…˜λͺ…νƒ€μž…κΈ°λ³Έκ°’μ„€λͺ…
authorsAuthorsundefinedλΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό μž‘μ„±μžλ“€(λ˜λŠ” 단독 μž‘μ„±μž) λͺ©λ‘ μžμ„Έν•œ μ„€λͺ…은 authors κ°€μ΄λ“œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό μž‘μ„±μžκ°€ ν•œ λͺ…인 κ²½μš°μ—λ„ author_*λ³΄λ‹€λŠ” authorsλ₯Ό ν”„λŸ°νŠΈ 맀터 ν•„λ“œλ‘œ ꢌμž₯ν•©λ‹ˆλ‹€.
authorstringundefined⚠️ authors μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€. λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό μž‘μ„±μž μ΄λ¦„μž…λ‹ˆλ‹€.
author_urlstringundefined⚠️ authors μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€. μž‘μ„±μž 이름에 링크둜 연결될 URL을 μ„€μ •ν•©λ‹ˆλ‹€. κΉƒν—ˆλΈŒλ‚˜ νŠΈμœ„ν„°, 페이슀뢁 ν”„λ‘œν•„ 등을 μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
author_image_urlstringundefined⚠️ authors μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€. μž‘μ„±μž 썸넀일 이미지 URL을 μ„€μ •ν•©λ‹ˆλ‹€.
author_titlestringundefined⚠️ authors μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€. μž‘μ„±μžμ— λŒ€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€.
titlestringλ§ˆν¬λ‹€μš΄ νŒŒμΌλΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό 제λͺ©
datestring파일λͺ… λ˜λŠ” 파일 생성 μ‹œκ°„λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό 생성 μ‹œκ°„. ν•΄λ‹Ή ν•„λ“œλ₯Ό μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ 파일 λ˜λŠ” 폴더λͺ…μ—μ„œ μΆ”μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό 같은 ν˜•μ‹μž…λ‹ˆλ‹€. 2021-04-15-blog-post.mdx, 2021-04-15-blog-post/index.mdx, 2021/04/15/blog-post.mdx. 그렇지 μ•ŠμœΌλ©΄ λ§ˆν¬λ‹€μš΄ νŒŒμΌμ„ μƒμ„±ν•œ μ‹œκ°„μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€.
tagsTag[]undefined포슀트λ₯Ό νƒœκ·Έν•˜κΈ° μœ„ν•œ λ¬Έμžμ—΄ λ˜λŠ” 였브젝트의 λͺ©λ‘μž…λ‹ˆλ‹€. labelκ³Ό permalink 2개의 ν•„λ“œλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.
draftbooleanfalseλΉ„κ³΅κ°œ μ„€μ • κ²Œμ‹œλ¬Όμ€ 개발 μƒνƒœμ—μ„œλ§Œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
unlistedbooleanfalseλͺ©λ‘μ— μ—†λŠ” λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Όμ€ 개발 및 μ œν’ˆ μƒνƒœμ—μ„œ λͺ¨λ‘ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ œν’ˆμ—μ„œ "μˆ¨κ²¨μ§„" μƒνƒœλΌ μΈλ±μŠ€κ°€ μƒμ„±λ˜μ§€ μ•Šκ³  μ‚¬μ΄νŠΈλ§΅μ—μ„œ μ œμ™Έλ˜λ©° 링크 정보λ₯Ό μ•Œκ³  μžˆλŠ” μ‚¬μš©μžλ§Œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
hide_table_of_contentsbooleanfalseλͺ©μ°¨λ₯Ό 였λ₯Έμͺ½μœΌλ‘œ μˆ¨κΈΈμ§€ μ—¬λΆ€
toc_min_heading_levelnumber2λͺ©μ°¨μ— ν‘œμ‹œλ˜λŠ” μ΅œμ†Œ 제λͺ© μˆ˜μ€€μž…λ‹ˆλ‹€. 2μ—μ„œ 6 μ‚¬μ΄μ˜ κ°’μœΌλ‘œ μ„€μ •ν•  수 있고 μ΅œλŒ“κ°’λ³΄λ‹€ μž‘κ±°λ‚˜ κ°™μ•„μ•Ό ν•©λ‹ˆλ‹€.
toc_max_heading_levelnumber3λͺ©μ°¨μ— ν‘œμ‹œλ˜λŠ” μ΅œλŒ€ 제λͺ© μˆ˜μ€€μž…λ‹ˆλ‹€. 2μ—μ„œ 6 μ‚¬μ΄μ˜ κ°’μœΌλ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
keywordsstring[]undefined<head> νƒœκ·Έ 내에 <meta name="keywords" content="keyword1,keyword2,..."/> ν˜•νƒœλ‘œ μƒμ„±λ˜λŠ” ν‚€μ›Œλ“œ 메타 νƒœκ·Έλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. 검색 μ—”μ§„μ—μ„œ μ‚¬μš©ν•©λ‹ˆλ‹€.
descriptionstringλ§ˆν¬λ‹€μš΄ μ½˜ν…μΈ  첫 번째 μ€„λ¬Έμ„œμ˜ μ„€λͺ…은 κ²€μƒ‰μ—”μ§„μ—μ„œ μ‚¬μš©ν•  수 있게 <head> νƒœκ·Έ μ•ˆμ— <meta name="description" content="..."/>와 <meta property="og:description" content="..."/>둜 μ²˜λ¦¬λ©λ‹ˆλ‹€.
imagestringundefinedκ²Œμ‹œκΈ€μ— λŒ€ν•œ 링크λ₯Ό ν‘œμ‹œν•  λ•Œ λ³΄μ—¬μ§€λŠ” 컀버 λ˜λŠ” 섬넀일 이미지λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.
slugstring파일 κ²½λ‘œλΈ”λ‘œκ·Έ 포슀트 URL을 λ³€κ²½ν•  수 μžˆλ„λ‘ ν—ˆμš©ν•©λ‹ˆλ‹€(/<routeBasePath>/<slug>). μ—¬λŸ¬ νŒ¨ν„΄μ„ μ„€μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€: slug: my-blog-post, slug: /my/path/to/blog/post, slug: /.
type Tag = string | {label: string; permalink: string};

// author key 값은 μ „μ—­ ν”ŒλŸ¬κ·ΈμΈ authors.yml νŒŒμΌμ—μ„œ author ν•­λͺ©μ„ μ°Έμ‘°ν•©λ‹ˆλ‹€.
type AuthorKey = string;

type Author = {
key?: AuthorKey;
name: string;
title?: string;
url?: string;
image_url?: string;
};

// ν”„λŸ°νŠΈ 맀터 authors ν•„λ“œλŠ” λ‹€μ–‘ν•œ ν˜•νƒœλ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
type Authors = AuthorKey | Author | (AuthorKey | Author)[];

예:

---
title: Welcome Docusaurus
authors:
- slorber
- yangshun
- name: Joel Marcey
title: Co-creator of Docusaurus 1
url: https://github.com/JoelMarcey
image_url: https://github.com/JoelMarcey.png
tags: [hello, docusaurus-v2]
description: This is my first post on Docusaurus.
image: https://i.imgur.com/mErPwqL.png
hide_table_of_contents: false
---

A Markdown blog post

i18n​

i18n μ†Œκ°œ λ¬Έμ„œλ₯Ό λ¨Όμ € ν™•μΈν•΄μ£Όμ„Έμš”.

λ²ˆμ—­ 파일 μœ„μΉ˜β€‹

  • Base path: website/i18n/[locale]/docusaurus-plugin-content-blog
  • Multi-instance path: website/i18n/[locale]/docusaurus-plugin-content-blog-[pluginId]
  • JSON 파일: docusaurus write-translations λͺ…λ Ή μ‹€ν–‰ ν›„ λ§Œλ“€μ–΄μ§„ 파일
  • Markdown files: website/i18n/[locale]/docusaurus-plugin-content-blog

파일 μ‹œμŠ€ν…œ ꡬ쑰 μ˜ˆβ€‹

website/i18n/[locale]/docusaurus-plugin-content-blog
β”‚
β”‚ # website/blog에 λŒ€ν•œ λ²ˆμ—­
β”œβ”€β”€ authors.yml
β”œβ”€β”€ first-blog-post.md
β”œβ”€β”€ second-blog-post.md
β”‚
β”‚ # λ Œλ”λ§λ  ν”ŒλŸ¬κ·ΈμΈ μ˜΅μ…˜μ— λŒ€ν•œ λ²ˆμ—­
└── options.json