스위즐링
이번 섹션에서는 도큐사우루스에서 사용자 정의 레이아웃을 처리하는 방법을 소개합니다.
설마 데자뷰?
이번 섹션은 스타일과 레이아웃과 비슷하지만 이번에는 스타일시트를 다루는 대신 실제 리액트 코드를 작성해보겠습니다. 우리는 도큐사우루스의 핵심 개념인 스위즐링에 대해 다룰 겁니다. 이를 통해 좀 더 깊은 사용자 지정을 할 수 있습니다.
스위즐링은 테마 컴포넌트를 여러분이 작성한 결과물로 바꿀 수 있으며 두 가지 패턴으로 제공됩니다.
왜 스위즐링이라고 하나요?
이름은 오브젝 티브-C와 스위프트 UI에서 가져온 것입니다. 메소드 스위즐링은 기존 선택자(메소드)의 구현을 변경하는 프로세스입니다.
도큐사우루스에서 컴포넌트 스위즐링은 테마에서 기본 컴포넌트보다 우선하는 대체 컴포넌트를 제공하는 것을 의미합니다.
리액트 컴포넌트에 대한 몽키 패치라고 이야기할 수 있습니다. 기존 구현을 여러분이 재정의할 수 있게 합니다. 개츠비(Gatsby)에도 테마 쉐도잉이라는 비슷한 개념이 있습니다.
좀 더 자세하게 알고 싶다면 테마 컴포넌트가 내부적으로 어떻게 처리되는지 이해해야 합니다.
스위즐링 프로세스
개요
도큐사우루스는 컴포넌트를 스위즐하기 위해 편리한 대화형 CLI를 제공합니다. 일반적으로 다음 명령만 기억하면 됩니다.
- npm
- Yarn
- pnpm
npm run swizzle
yarn swizzle
pnpm run swizzle
src/theme
디렉토리에 다음 예시와 같은 새로운 컴포넌트를 생성합니다.
- Ejecting
- Wrapping
import React from 'react';
export default function SomeComponent(props) {
// JSX, CSS, 리액트 후크 변경을 포함한 구현을
// 사용자 지정할 수 있습니다.
return (
<div className="some-class">
<h1>Some Component</h1>
<p>Some component implementation details</p>
</div>
);
}
import React from 'react';
import SomeComponent from '@theme-original/SomeComponent';
export default function SomeComponentWrapper(props) {
// 속성이나 JSX 요소를 추가하는 것을 포함해
// 원본 컴포넌트의 기능을 향상시킬 수 있습니다.
return (
<>
<SomeComponent {...props} />
</>
);
}
스위즐할 수 있는 모든 테마, 컴포넌트에 대한 목록을 보려면 다음 명령을 실행하세요.
- npm
- Yarn
- pnpm
npm run swizzle -- --list
yarn swizzle --list
pnpm run swizzle -- --list
--help
옵션을 사용하거나 스위즐 CLI 문서를 참조하면 사용할 수 있는 모든 CLI 옵션을 확인할 수 있습니다.
컴포넌트 스위즐링 후에 도큐사우루스에서 새로운 컴포넌트를 인지할 수 있도록 개발 서버 재시작이 필요합니다.
어떤 컴포넌트가 안전하게 스위즐 할 수 있는지에 대한 이해가 필요합니다. 일부 컴포넌트는 테마 내부 구현 세부 사항입니다.
docusaurus swizzle
은 컴포넌트를 스위즐하는 것을 돕기 위한 자동화된 방법일 뿐입니다. src/theme/SomeComponent.js
파일을 직접 생성할 수도 있으며 도큐사우루스에서는 이를 처리할 수 있습니다. 이 명령 뒤에 보이지 않는 마법 따위는 없습니다!
추출하기(Ejecting)
테마 컴포넌트를 추출하는 것은 여러분이 완전한 사용자 지정과 재정의를 할 수 있도록 원본 테마 컴포넌트의 사본을 생성하는 프로세스입니다.
테마 컴포넌트를 추출하려면 swizzle CLI를 대화식으로 사용하거나 --eject
옵션과 함께 사용하세요.
- npm
- Yarn
- pnpm
npm run swizzle [theme name] [component name] -- --eject
yarn swizzle [theme name] [component name] --eject
pnpm run swizzle [theme name] [component name] -- --eject
예:
- npm
- Yarn
- pnpm
npm run swizzle @docusaurus/theme-classic Footer -- --eject
yarn swizzle @docusaurus/theme-classic Footer --eject
pnpm run swizzle @docusaurus/theme-classic Footer -- --eject
위의 예시는 현재 <Footer />
컴포넌트 구현체를 여러분의 사이트 src/theme
디렉토리에 복사합니다. 도큐사우루스는 이제 원본 대신 <Footer>
컴포넌트의 복사본을 사용합니다. 이제 <Footer>
컴포넌트를 완전히 원하는대로 구현할 수 있습니다.
import React from 'react';
export default function Footer(props) {
return (
<footer>
<h1>This is my custom site footer</h1>
<p>And it is very different from the original</p>
</footer>
);
}
도큐사우루스 업그레이드 후 추출한 컴포넌트를 최신 상태로 유지하려면 eject 명령을 다시 실행하고 변경 사항을 git diff
명령으로 비교하세요. 또한 파일 상단에 변경 사항에 대한 간단한 설명을 추가해놓으면 다시 추출했을 때 변경 사항을 좀 더 쉽게 적용할 수 있습니다.
감싸기(Wrapping)
테마 컴포넌트를 감싸는 것은 여러분이 컴포넌트의 기능을 향상시킬 수 있도록 원본 테마 컴포넌트를 감싼 래퍼를 생성하는 프로세스입니다.
테마 컴포넌트를 감싸려면 swizzle CLI를 대화식으로 사용하거나 --wrap
옵션과 함께 사용하세요.
- npm
- Yarn
- pnpm
npm run swizzle [theme name] [component name] -- --wrap