Storybook er et kraftig verktøy for å bygge UI-komponenter isolert. Det hjelper deg med å lage og teste komponenter uten å kjøre hele applikasjonen.
Hvis du noen gang har brukt Storybook med Next.js, vil du legge merke til at du må konfigurere den til å håndtere CSS og bilder riktig. Prosessen kan være frustrerende, men disse enkle trinnene vil bidra til å lede veien.
Start med å sette opp Next.js-prosjektet
Hvis du ikke allerede har satt opp et Next.js-prosjekt, følg den offisielle Next.js Komme i gang-veiledning for å lage et nytt prosjekt.
Initialiser Storybook
Kjør følgende kommando i terminalen for å initialisere Storybook.
npx sb init --builder webpack5
Denne kommandoen oppdager prosjektet du jobber med, installerer alle nødvendige pakker og lager eksempelhistorier.
Sett opp CSS
Det første du må gjøre er å inkludere den globale CSS-filen i preview.js.
Sett opp globale stiler
De globale stilene gjelder for hele applikasjonen. For å bruke disse stilene i historier, kan du importere filen til individuelle historier, og det ville fungere. Imidlertid vil du ende opp med å omskrive importerklæringen på tvers av mange historier eller til og med glemme det.
En bedre løsning er å importere de globale stilene i .storybook/preview.js fil, en fil som inneholder alle de delte konfigurasjonene for Storybook.
På toppen av .storybook/preview.js inkluderer du følgende importerklæring.
import "../styles/globals.css";
Sett opp Sass for Storybook i Next.js
Som standard kommer ikke Storybook med ut-av-boksen støtte for Sass utvidelsesspråk. Du må utvide webpack-konfigurasjonen ved å installere style-loader, css-loader og sass-loader.
npm i -D style-loader css-loader sass-loader
Her er hva disse pakkene gjør:
- style-loader injiserer CSS i DOM.
- css-loader tolker @import og URL() som import/require og løser dem.
- sass-loader laster SCSS inn i CSS.
For å konfigurere disse pakkene, legg til følgende kode i .storybook/main.js:
konst sti = krever('sti');
modul.exports = {
// andre konfigurasjoner
webpackFinal: asynkron (config) => {
config.module.rules.push(
{
test: /\\.s(a|c)ss$/,
inkluderer: path.resolve (__dirnavn, '../'),
bruk: [
'style-loader',
{
loader: 'css-loader',
alternativer: {
moduler: {
auto: ekte,
localIdentName: '[navn]__[lokal]--[hash: base64:5]',
},
},
},
'sass-loader'
],
},
);
komme tilbake config;
}
}
Etter dette skal Sass være tilgjengelig i Storybook.
Bruk uoptimalisert prop på Next.js-bilder
Next.js har mange optimaliseringsfunksjoner. En av dem er bildeoptimalisering gjennom bildekomponenten som gjør at bilder lastes raskere og tilpasser seg skjermen. Det er imidlertid vanskelig å jobbe med i Storybook siden Storybook kjører isolert fra Next.js-miljøet. Det er bedre å de-optimalisere bilder i historier.
For å starte, må du betjene den offentlige katalogen i Storybook for å indikere hvor bildene er plassert. Du kan gjøre det i npm-skript kart i package.json fil eller i .storybook/main.js.
I package.json, oppdater Storybook-skriptene for å betjene den offentlige katalogen.
"skript": {
"historiebok": "start-historiebok -p 6006 -s ./offentlig",
"bygge-historiebok": "bygge-historiebok -s offentlige"
}
Alternativt, endre ./storybook/main.js å inkludere den statiske katalogen som i dette tilfellet er den offentlige mappen.
modul.eksport = {
// andre konfigurasjoner
"staticDirs": [ "../offentlig" ],
}
Etter å ha servert den offentlige katalogen, bruk den uoptimaliserte rekvisitten på Next.js-bildene som brukes i historier.
I .storybook/main.js legger du til følgende kode:
import * som Neste bilde fra "neste/bilde";
konst OriginalNextImage = NextImage.misligholde;
Gjenstand.defineProperty (NextImage, "misligholde", {
konfigurerbar: ekte,
verdi: (rekvisitter) => (
<OriginalNextImage
{...Rekvisitter}
uoptimalisert
/>
),
});
Denne koden bruker den uoptimaliserte rekvisitten hvor som helst hvor bildekomponenten brukes.
Bruke Storybook i Next.js
Storybook er et av de verktøyene du synes er for kjedelige å bruke, men når du først begynner å bruke dem, skjønner du hva du gikk glipp av. Med Storybook kan du lage og teste ut forskjellige komponenter uten å kjøre hele applikasjonen. Det gjør derfor byggekomponenter fra grunnen av enkle.
Hvis du bruker Next.js, sørg for at du konfigurerer CSS og deoptimerer bilder før du begynner.