Tworzenie dokumentacji komponentów w Storybook

Dokumentacje komponentów UI stają się standardem w pracy front-end dewelopera. W artykule przedstawiam jak stworzyć dokumentację za pomocą Storybooka.

Czym jest Storybook?

Zgodnie z opisem w dokumentacji Storybook to kolekcja „opowieści” (stories — po angielsku brzmi lepiej ;)). Prościej mówiąc każdy stories to komponent, a Storybook pomaga w grupowaniu i wyświetlaniu ich.

Storybook pomaga w tworzeniu Style Guide (o tym terminie pojawi się więcej w innym artykule, zachęcam do googlowania).

Jak korzystać ze Storybooka? Poradnik

Instalacja

W artykule przedstawiam szybki sposób, dzięki CLI.

npx -p @storybook/cli sb init --type html

Parametr type oznacza jakiego typu to będzie projekt — może to być react czy angular. W tym przypadku będzie to HTML.

Więcej na ten temat oraz listę dostępnych opcji można znaleźć w oficjalnej dokumentacji Storybooka. Znajduje się tam również instrukcja Slow Start Guide, która pokazuje jak zainstalować Storybooka krok po kroku (jest tam m.in. dodanie pakietu do package.json czy dodanie pliku konfiguracyjnego).

Uruchomienie Storybooka

Odpowiedzialna za to jest komenda:

npm run storybook

To wszystko!

Storybook 
C localhost6006/?path=/story/demo--heading 
6@10 
Storybook 
Press "/" to search... 
c:] Demo 
Button 
Hello World
Storybook tuż po uruchomieniu

Tak przedstawia się pierwszy widok po uruchomieniu Storybooka.

Można już zacząć pracę i tworzyć własną dokumentację komponentów.

Tworzenie Storiesa

Dodawanie storiesa jest możliwe na trzy sposoby:

  • CSF (Component Story Format) – domyślnie (wykorzystam ten sposób).
  • storiesOf API
  • MDX syntax — w trakcie tworzenia (w momencie powstawania artykułu)

Przykładowy stories wygląda następująco:

export default {
  title: 'Components|Button',
};

export const heading = () => '<h1>Heading 1</h1>';

export const button = () => {
  const btn = document.createElement('button');
  btn.type = 'button';
  btn.innerText = 'Hello Button';
  btn.addEventListener('click', e => console.log(e));
  return btn;
};

Domyślny export definiuje tytuł komponentu. Natomiast zwykłe exporty to komponenty bądź ich stany (podstrona w Storybooku).

Wszystko jest w plikach .js co oznacza, że nie można korzystać ze zwykłego HTML-u. No, chyba że to React i JSX :).

Hierarchia storiesów

Teraz warto wiedzieć, jak budować hierarchię w Storybooku.

W domyślnym eksporcie w parametrze title definiujemy hierarchię.

export default {
  title: 'Components|Button/Nested',
};

Znakiem „|” oddzielamy tytuł najwyższego poziomu, a z pomocą „/” definiujemy, jak komponent ma być zagnieżdżony. W powyższym przykładzie „Components” to tytuł sekcji natomiast „Button” i „Nested” to grupa.

Hierarchia nawigacji w Storybooku
Hierarchia w Storybooku

Dodawanie plików CSS, SASS do Storybooka

Domyślnie Storybook pokaże błąd, jeśli zostanie zaimportowany plik CSS czy SCSS. Aby była możliwość korzystania z tego należy odpowiednio skonfigurować Storybooka.

W katalogu .storybook należy utworzyć plik webpack.config.js, w którym należy umieścić poniższy kod.

const path = require('path');
// Export a function. Accept the base config as the only param.
module.exports = async ({ config, mode }) => {
  // `mode` has a value of 'DEVELOPMENT' or 'PRODUCTION'
  // You can change the configuration based on that.
  // 'PRODUCTION' is used when building the static version of storybook.
  // Make whatever fine-grained changes you need
  config.module.rules.push({
    test: /\.scss$/,
    use: ['style-loader', 'css-loader', 'sass-loader'],
    include: path.resolve(__dirname, '../'),
  });
  // Return the altered config
  return config;
};

Powyższy kod dodaje możliwość wczytania plików SCSS w projekcie. Ten kawałek kodu pochodzi z oficjalnej dokumentacji.

No i należy zainstalować zależności.

npm install node-sass sass-loader css-loader style-loader

Teraz wystarczy zrobić import pliku np.:

import './src/_buttons.scss';

Gotowe!

Do dzieła! Podsumowanie

Inspiracją do tego artykułu była chęć stworzenia własnych komponentów, które mogę wykorzystywać wielokrotnie. Idealnym narzędziem wydaje się Storybook. Jeśli tworzysz wiele projektów, to z pewnością zauważasz, że wielokrotnie tworzysz te same komponenty — warto w tej sytuacji stworzyć coś raz i później wielokrotnie wykorzystać.

Pochwal się własną dokumentacją w komentarzu!

Źródła

Oficjalna strona Storybooka – https://storybook.js.org
Dokumentacja – https://storybook.js.org/docs/basics/introduction/

Komentarze

2 odpowiedzi na „Tworzenie dokumentacji komponentów w Storybook”

  1. Fajny wpis!

    Zastanów się, czy warto wymagać tylu pól w formularzu aby udzielić komentarz.
    Wydaje mi się, że ludzie z chęcią pisali by komentarze, ale gdy widzą taki formularz, to raczej go ignorują. Może warto zintegrować bloga z Discusem? To dosyć proste. U mnie na blogu jest szereg wpisów na ten temat.

    1. Rozważałem Disqusa przy tworzeniu bloga i podjąłem decyzję, że chcę skorzystać z domyślnego systemu. Na pewno przeanalizuję uproszczenie formularza! Pozdrawiam.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.