Svelte Webpack5 환경에 Storybook 통합하기 + Chromatic 배포
목차 펼치기
머리말
머리말
Storybook는 Svelte를 위한 공식 문서도 제공해주고 있습니다. 하지만 공식 문서만으로 Svelte 프로젝트에 Storybook을 설치하기에는 다소 부족했고, 관련해서 나오는 자료도 많지 않았기에 실제 설치를 진행한 과정을 기록해봅니다.
들어가기 전에
들어가기 전에
이 글은 Webpack 5를 사용하고 있는 Svelte 프로젝트에 Storybook을 설치하고, Chromatic을 통해 배포하는 방법에 대해 설명하고 있습니다.
단, 몇 가지 방법을 시도해보았으나 Svelte의 중심 개념 중
slot은 Storybook에서 사용할 수 없었습니다.(참고:
Svelte Slots #22774) decorators를 이용해서 Story 컴포넌트를 slot을 통해 렌더링 하는 예제(
composite-component)는 제공하고 있으나, Story 컴포넌트가 내부적으로 slot을 통해 구현되고 있다면 이를 구현해 줄 방법이 없었습니다.
하지만 저는 Storybook으로 구현할 컴포넌트는 중첩 구조가 없는 원자 단위의 컴포넌트만 구현할 것이기에 큰 이슈라고 생각하지는 않았습니다. 혹시 방법을 알고 계시다면 댓글로 가르쳐주시기를 부탁드리며, 그렇지 않다면 컴포넌트를 구현할 때 slot을 사용하지 않은 방법을 검토해주세요.
Svelte 스타일로 Story를 생성할 수 있도록 지원해주는
addon-svelte-csf는 사용하지 않았습니다. (참고:
Integrate Storybook in Svelte: Doing it the Svelte-way)
편의를 위해 이후 Svelte는 스벨트로, Storybook은 스토리북으로, Webpack 5는 웹팩으로 명칭하겠습니다.
스벨트에 스토리북 설정하기
스벨트에 스토리북 설정하기
스토리북 설치
스토리북 설치
스토리북을 위해 필요한 라이브러리를 설치해주고, 기본적인 환경설정 파일을 생성합니다.
만약 설치 과정 중 권한 오류인
EACCES: permission denied오류가 발생한다면, sudo로 실행하기 보다 현재 프로젝트의
node_moduels
경로 및 하위 경로에 대해 전체 권한을 부여한 후 설치 명령어를 실행하는 것이 좋습니다. sudo로 진행하게 되면 이후 스토리북 관련 생성된 파일들도 모두 권한을 요구하게 되어 더 번거롭습니다.
설치 과정 중 Vite와 웹팩 중 프로젝트에서 사용 중인 번들러를 선택하는 질문이 나올 수 있는데, 웹팩을 선택해서 설치를 계속 합니다.
이후 설치 과정에서 자동으로 생성된 파일을 토대로 추가 설정을 진행하게 됩니다.
.storybook
폴더에 기본 설정 파일이 생성됩니다.
/stories
폴더 내에 기본 예시 코드가 생성됩니다.
package.json
파일 내에 스토리북 실행 및 빌드 관련 스크립트가 생성됩니다.
npm run storybook
: 저는 이 스크립트를
npm run sb
로 실행되도록 별칭을 변경했습니다.
npm run build-storybook
: 이 명령어는 추후 Chromatic으로 배포할 때, 내부적으로 사용되는 명령어기 때문에 별칭을 변경하지 않고 그대로 사용합니다.
스토리북 웹팩 설정
스토리북 웹팩 설정
webpackFinal
속성을 통해 프로젝트에서 사용하고 있는 웹팩 설정을 동일하게 적용해줄 수 있습니다. 위 코드는 최종적으로 적용한 코드입니다.
svelte-loader에 대해 설정하지 않으면, 스토리북 실행 시 위의 오류가 발생할 수 있습니다. 스벨트 파일 내 구문을 해석하지 못해서 발생하는 오류로 스토리북 리포지터리에서 생성되었던
를 참고했습니다.
svelteLoader
타입에 대해서는 any로 처리해버렸습니다.