React Academy · Lektion

Peer dependencies och tree shaking

Deklarera React som ett peer dependency, aktivera tree shaking utan sidoeffekter och testa det publicerade paketet.

Lektion 3 av 413 steg

Peer dependencies och tree shaking är en gratis lektion i React Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.

Vad är peer dependencies?

Peer dependencies deklarerar paket som ert bibliotek kräver men förväntar sig att användaren tillhandahåller. I bibliotekets package.json ska React ligga i peerDependencies, inte i dependencies. När en användare installerar ert bibliotek installerar npm/yarn inte React automatiskt – användarens app har redan React, och ert bibliotek delar den instansen.

Varför ska React inte ligga i dependencies?

Om React ligger i bibliotekets dependencies kan npm installera en andra kopia av React bredvid användarens React. Två React-instanser i samma app gör att alla hooks slutar fungera och ger felet "Invalid hook call". Genom att deklarera React som en peerDependency talar ni om för npm: "Jag behöver React, men använd den som användaren redan har."

peerDependenciesMeta för valfria peers

Vissa peers kan vara valfria – till exempel i ett bibliotek som stöder både styled-components och CSS Modules. Markera valfria peers med peerDependenciesMeta: { 'styled-components': { optional: true } }. npm varnar då inte användarna om saknade valfria peers, men TypeScript-typer kan fortfarande tillhandahållas när det valfria paketet är installerat.

Fältet sideEffects

Fältet sideEffects i package.json talar om för bundlers om ert bibliotek är säkert att tree-shaka. Om ni anger "sideEffects": false talar ni om för webpack, Rollup och liknande verktyg att import av en modul från ert bibliotek inte orsakar sidoeffekter – alla oanvända exporter kan då tas bort säkert från användarens bundle.

sideEffects med CSS-importer

CSS-importer är en vanlig sidoeffekt – de lägger till formatmallar på sidan som en sidoeffekt av att importeras. Om ert bibliotek importerar CSS-filer anger ni "sideEffects": ["*.css", "*.scss"] för att tala om för bundlers att JS-filer kan tree-shakas säkert men att CSS-filer alltid måste inkluderas när de importeras.

Granular tree-shaking med namngivna exporter

För maximal möjlighet till tree-shaking exporterar ni varje komponent som en namngiven export från sin egen fil. I index.ts exporterar ni sedan allt igen: export { Button } from './Button'. När en användare bara importerar Button kan bundlern ta bort alla andra komponenter. Barrel-filer med vidareexporter möjliggör detta mönster.

Testa hur effektiv tree-shaking är

Använd bundlejs.com för att testa tree-shaking: klistra in ert import-uttryck så rapporterar tjänsten den faktiska bundle-storleken. npm-paketet size-limit låter er definiera storleksgränser i package.json och få CI att misslyckas om importstorleken överskrider gränsen: "size-limit": [{ "path": "dist/index.js", "limit": "10 KB" }].

Storleksbudget vid publicering

Fastställ en storleksbudget för importer från ert bibliotek. Kör npx size-limit i CI för att upprätthålla den. Om bundlens påverkan växer över tid tyder det på att bibliotekets omfattning gradvis ökar. Ett fokuserat komponentbibliotek bör hålla importer av enskilda komponenter under några kilobyte. Lägg in varningar för regressioner innan de når användarna.

CSS-in-JS-bibliotek i komponentbibliotek

Undvik styled-components och Emotion i komponentbibliotek som ni tänker distribuera. Dessa CSS-in-JS-lösningar vid körning kräver att användaren installerar samma bibliotek och version, vilket skapar konflikter mellan peer dependencies. Även om användaren använder Tailwind eller vanlig CSS måste CSS-in-JS-körmiljön fortfarande bundlas. Föredra CSS Modules, som kompileras till vanlig CSS vid byggtillfället.

CSS Modules i bibliotek

CSS Modules fungerar bra i bibliotek när de kombineras med en bundler som bearbetar dem. tsup och Rollup kan bädda in CSS Modules-utdata som scopade klassnamn. Användaren behöver inte konfigurera något – formaten är redan scopade och inkluderade i JS-bundlen eller i en separat CSS-fil som importeras.

devDependencies jämfört med peerDependencies

Era egna utvecklingsverktyg (tsup, TypeScript, testbibliotek och Storybook) ska ligga i devDependencies – de behövs bara under utvecklingen och installeras inte från npm hos användarna. React ska ligga både i peerDependencies (krav vid körning) och devDependencies (behövs för att kompilera och testa biblioteket lokalt).

Vad fältet sideEffects betyder

Vad kommunicerar inställningen "sideEffects": false i ett biblioteks package.json till bundlers?

Lektionssammanfattning: peers och tree-shaking

Deklarera React i peerDependencies (inte dependencies) så att användarna delar appens React-instans. sideEffects: false möjliggör fullständig tree-shaking av ert bibliotek. Använd sideEffects: ['*.css'] för att skydda CSS-importer från att tas bort. Namngivna exporter från enskilda filer ger maximal granularitet i tree-shaking. Upprätthåll en storleksbudget med size-limit i CI. Föredra CSS Modules framför CSS-in-JS i bibliotek för att undvika konflikter mellan peer dependencies.

Gratis att börja

Lär dig React med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
88
Lektioner
324

Vanliga frågor

Är lektionen ”Peer dependencies och tree shaking” gratis?

Ja – hela texten till ”Peer dependencies och tree shaking” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Peer dependencies och tree shaking”?

Deklarera React som ett peer dependency, aktivera tree shaking utan sidoeffekter och testa det publicerade paketet. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig React Academy?

Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Peer dependencies och tree shaking”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här React Academy-lektionen?

Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Paketera bibliotek med Rollup och tsup
  2. Dubbla paketutdata för ESM och CJS
  3. Peer dependencies och tree shaking
  4. Publicera till npm och semantisk versionshantering
← Tillbaka till React Academy