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

πŸ“¦ plugin-client-redirects

ν΄λΌμ΄μ–ΈνŠΈ λ¦¬λ‹€μ΄λ ‰νŠΈλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ λ„νμ‚¬μš°λ£¨μŠ€ ν”ŒλŸ¬κ·ΈμΈμž…λ‹ˆλ‹€.

ν”ŒλŸ¬κ·ΈμΈμ—μ„œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ λ§Œλ“  λ„νμ‚¬μš°λ£¨μŠ€ νŽ˜μ΄μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈν•  수 μžˆλ„λ‘ μ—¬λŸ¬λΆ„μ˜ 정적인 μ‚¬μ΄νŠΈμ— HTML νŽ˜μ΄μ§€λ₯Ό μΆ”κ°€λ‘œ λ§Œλ“­λ‹ˆλ‹€.

production only

ν•΄λ‹Ή ν”ŒλŸ¬κ·ΈμΈμ€ λΉŒλ“œ μ‚°μΆœλ¬Όμ—μ„œλ§Œ μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ— 개발 μ€‘μ—λŠ” λΉ„ν™œμ„±ν™”λ˜κ³  μ œν’ˆ λΉŒλ“œ μ‹œμ—λ§Œ ν™œμ„±ν™”λ©λ‹ˆλ‹€.

warning

κ°€λŠ₯ν•˜λ‹€λ©΄ μ„œλ²„ μΈ‘ λ¦¬λ‹€μ΄λ ‰νŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜κΈ° 전에 μ—¬λŸ¬λΆ„μ˜ 호슀트 μ„œλΉ„μŠ€ μ—…μ²΄κ²Œ 이 κΈ°λŠ₯을 μ§€μ›ν•˜μ§€ μ•ŠλŠ”μ§€ λ¨Όμ € ν™•μΈν•΄λ³΄μ„Έμš”.

μ„€μΉ˜β€‹

npm install --save @docusaurus/plugin-client-redirects

섀정​

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

μ˜΅μ…˜νƒ€μž…κΈ°λ³Έκ°’μ„€λͺ…
fromExtensionsstring[][]λ¦¬λ‹€μ΄λ ‰νŠΈ ν›„ κ²½λ‘œμ—μ„œ μ œκ±°ν•  ν™•μž₯μžμž…λ‹ˆλ‹€.
toExtensionsstring[][]λ¦¬λ‹€μ΄λ ‰νŠΈ ν›„ κ²½λ‘œμ— μΆ”κ°€ν•  ν™•μž₯μžμž…λ‹ˆλ‹€.
redirectsRedirectRule[][]λ¦¬λ‹€μ΄λ ‰νŠΈ κ·œμΉ™ λͺ©λ‘μž…λ‹ˆλ‹€.
createRedirectsCreateRedirectsFnundefinedλ¦¬λ‹€μ΄λ ‰νŠΈ κ·œμΉ™μ„ λ§Œλ“€κΈ° μœ„ν•œ μ½œλ°±μž…λ‹ˆλ‹€. λ„νμ‚¬μš°λ£¨μŠ€λŠ” μƒμ„±ν•œ λͺ¨λ“  κ²½λ‘œμ— λŒ€ν•΄ μ½œλ°±μ„ μš”μ²­ν•˜κ³  λ°˜ν™˜κ°’μ„ μ‚¬μš©ν•΄ 더 λ§Žμ€ 경둜λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
λ…ΈνŠΈ

ν”ŒλŸ¬κ·ΈμΈμ—μ„œ siteConfig.onDuplicateRoutes 섀정을 ν™•μΈν•˜κ³  μ—¬λŸ¬ νŒŒμΌμ„ 같은 μœ„μΉ˜λ‘œ 내보낼 λ•Œ λ‘œκΉ… μˆ˜μ€€μ„ μ‘°μ •ν•©λ‹ˆλ‹€.

νƒ€μž…β€‹

RedirectRule​

type RedirectRule = {
to: string;
from: string | string[];
};
λ…ΈνŠΈ

"from"κ³Ό "to"의 κ°œλ…μ€ 이 ν”ŒλŸ¬κ·ΈμΈμ˜ ν•΅μ‹¬μž…λ‹ˆλ‹€. "From"은 μž‘μ„±_ν•˜λ €λŠ” 경둜, 즉 μž‘μ„±λ  μΆ”κ°€ HTML νŒŒμΌμ„ μ˜λ―Έν•©λ‹ˆλ‹€. "to"λŠ” λ¦¬λ‹€μ΄λ ‰νŠΈ_ν•˜λ €λŠ” 경둜λ₯Ό μ˜λ―Έν•˜λ©° 일반적으둜 λ„νμ‚¬μš°λ£¨μŠ€κ°€ 이미 μ•Œκ³  μžˆλŠ” κ²½λ‘œμž…λ‹ˆλ‹€.

이 λ•Œλ¬Έμ— 같은 "to"에 λŒ€ν•΄ μ—¬λŸ¬ 개의 "from"을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ‘ 같은 λͺ©μ μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈλ˜λŠ” μ—¬λŸ¬ 개의 HTML νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€. λ°˜λ©΄μ— "from"은 ν•˜λ‚˜λ³΄λ‹€ λ§Žμ€ "to"λ₯Ό κ°€μ§ˆ 수 μ—†μŠ΅λ‹ˆλ‹€. μž‘μ„±λœ HTML νŒŒμΌμ€ λͺ…ν™•ν•œ λͺ©μ μ§€κ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

CreateRedirectsFn​

// `path` λ§€κ°œλ³€μˆ˜λŠ” λ„νμ‚¬μš°λ£¨μŠ€κ°€ 이미 μƒμ„±ν•œ λΌμš°νŠΈμž…λ‹ˆλ‹€. 일반적으둜 "to"이며
// λ°˜ν™˜κ°’μ€ "from"이 λ©λ‹ˆλ‹€. 거짓 값을 λ°˜ν™˜ν•˜λ©΄
// νŠΉμ • κ²½λ‘œμ— λŒ€ν•œ λ¦¬λ‹€μ΄λ ‰νŠΈ νŽ˜μ΄μ§€κ°€ μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
type CreateRedirectsFn = (path: string) => string[] | string | null | undefined;

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

λ‹€μŒμ€ μ„€μ • μ˜ˆμ‹œμž…λ‹ˆλ‹€:

docusaurus.config.js
module.exports = {
plugins: [
[
'@docusaurus/plugin-client-redirects',
{
fromExtensions: ['html', 'htm'], // /myPage.html -> /myPage
toExtensions: ['exe', 'zip'], // /myAsset -> /myAsset.zip (ν›„μžκ°€ μžˆλŠ” 경우)
redirects: [
// /docs/oldDoc -> /docs/newDoc
{
to: '/docs/newDoc',
from: '/docs/oldDoc',
},
// μ—¬λŸ¬κ°œμ˜ 이전 κ²½λ‘œμ—μ„œ μƒˆλ‘œμš΄ 경둜둜 λ¦¬λ‹€μ΄λ ‰νŠΈ
{
to: '/docs/newDoc2',
from: ['/docs/oldDocFrom2019', '/docs/legacyDocFrom2016'],
},
],
createRedirects(existingPath) {
if (existingPath.includes('/community')) {
// /docs/team/Xμ—μ„œ /community/X둜 그리고 /docs/support/Xμ—μ„œ /community/X둜 λ¦¬λ‹€μ΄λ ‰νŠΈ
return [
existingPath.replace('/community', '/docs/team'),
existingPath.replace('/community', '/docs/support'),
];
}
return undefined; // 잘λͺ»λœ κ°’ λ°˜ν™˜: λ¦¬λ‹€μ΄λ ‰νŠΈκ°€ λ§Œλ“€μ–΄μ§€μ§€ μ•ŠμŒ
},
},
],
],
};