React Academy · Lekcja

Zależności peer i tree shaking

Deklarować React jako zależność peer, włączać tree shaking bez efektów ubocznych i testować opublikowany pakiet

Lekcja 3 z 413 kroki

Zależności peer i tree shaking to bezpłatna lekcja React Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

Czym są peer dependencies?

Peer dependencies deklarują pakiety wymagane przez bibliotekę, ale dostarczane przez odbiorcę. W package.json biblioteki React powinien znajdować się w sekcji peerDependencies, a nie dependencies. Gdy użytkownik instaluje bibliotekę, npm/yarn nie instaluje automatycznie React — aplikacja użytkownika ma już React, a biblioteka korzysta z tej samej instancji.

Dlaczego nie umieszczać React w dependencies?

Jeśli React znajduje się w dependencies biblioteki, npm może zainstalować drugą kopię Reacta obok Reacta odbiorcy. Dwie instancje React w tej samej aplikacji powodują nieprawidłowe działanie wszystkich hooków i błąd „Invalid hook call”. Deklarując React jako peerDependency, informujesz npm: „Potrzebuję React, ale użyj tego, który odbiorca już ma”.

peerDependenciesMeta dla opcjonalnych peer dependencies

Niektóre peer dependencies mogą być opcjonalne — na przykład biblioteka obsługująca zarówno styled-components, jak i CSS Modules. Oznacz opcjonalne peer dependencies za pomocą peerDependenciesMeta: { 'styled-components': { optional: true } }. npm nie będzie ostrzegać użytkowników o brakujących opcjonalnych peer dependencies, ale typy TypeScript nadal mogą być dostępne po zainstalowaniu opcjonalnego pakietu.

Pole sideEffects

Pole sideEffects w package.json informuje bundlery, czy biblioteka może bezpiecznie podlegać tree-shakingowi. Ustawienie "sideEffects": false informuje webpack, Rollup i podobne narzędzia, że importowanie dowolnego modułu biblioteki nie powoduje efektów ubocznych — wszystkie nieużywane eksporty można bezpiecznie usunąć z bundla odbiorcy.

sideEffects a importy CSS

Importy CSS są częstym efektem ubocznym — wstrzykują style do strony jako skutek importowania. Jeśli biblioteka importuje pliki CSS, ustaw "sideEffects": ["*.css", "*.scss"], aby poinformować bundlery, że pliki JS można bezpiecznie poddać tree-shakingowi, ale pliki CSS muszą zawsze zostać dołączone po zaimportowaniu.

Precyzyjny tree-shaking dzięki eksportom nazwanym

Aby uzyskać maksymalną skuteczność tree-shakingu, eksportuj każdy komponent jako eksport nazwany z własnego pliku. W pliku index.ts ponownie eksportuj wszystko: export { Button } from './Button'. Gdy odbiorca importuje tylko Button, bundler może usunąć wszystkie pozostałe komponenty. Pliki zbiorcze z ponownymi eksportami umożliwiają stosowanie tego wzorca.

Testowanie skuteczności tree-shakingu

Użyj bundlejs.com, aby przetestować tree-shaking: wklej instrukcję importu, a narzędzie podaje rzeczywisty rozmiar bundla. Pakiet npm size-limit pozwala zdefiniować limity rozmiaru w package.json i przerwać CI, jeśli rozmiar importu przekroczy limit: "size-limit": [{ "path": "dist/index.js", "limit": "10 KB" }].

Budżet rozmiaru publikowanego pakietu

Ustal budżet rozmiaru dla importów biblioteki. Uruchamiaj npx size-limit w CI, aby go egzekwować. Wzrost wpływu bundla z czasem wskazuje na rozszerzanie zakresu biblioteki. Skoncentrowana biblioteka komponentów powinna utrzymywać importy pojedynczych komponentów na poziomie kilku kilobajtów. Wykrywaj regresje, zanim dotrą do odbiorców.

Biblioteki CSS-in-JS w bibliotekach komponentów

Unikaj styled-components i Emotion w bibliotekach komponentów przeznaczonych do dystrybucji. Te rozwiązania CSS-in-JS działające w czasie wykonywania wymagają od odbiorcy zainstalowania tej samej biblioteki i wersji, co prowadzi do konfliktów peer dependencies. Nawet jeśli odbiorca używa Tailwind lub zwykłego CSS, nadal musi bundlować środowisko uruchomieniowe CSS-in-JS. Preferuj CSS Modules, które podczas kompilowania są przekształcane w zwykły CSS.

CSS Modules w bibliotekach

CSS Modules dobrze sprawdzają się w bibliotekach w połączeniu z bundlerem, który je przetwarza. tsup i Rollup mogą osadzić wynik CSS Modules jako nazwy klas o ograniczonym zasięgu. Odbiorca nie musi niczego konfigurować — style są już ograniczone do właściwego zakresu i dołączone do bundla JS albo umieszczone w osobnym pliku CSS, który jest importowany.

devDependencies a peerDependencies

Własne narzędzia deweloperskie (tsup, TypeScript, biblioteki do testowania i Storybook) umieść w devDependencies — są potrzebne tylko podczas tworzenia i nie są instalowane przez npm u odbiorców. React umieść zarówno w peerDependencies (wymaganie środowiska uruchomieniowego), jak i w devDependencies (jest potrzebny do lokalnego kompilowania i testowania biblioteki).

Znaczenie pola sideEffects

Co ustawienie "sideEffects": false w pliku package.json biblioteki komunikuje bundlerom?

Podsumowanie lekcji: peer dependencies i tree-shaking

Zadeklaruj React w peerDependencies (a nie dependencies), aby odbiorcy korzystali z instancji React ze swojej aplikacji. sideEffects: false umożliwia pełny tree-shaking biblioteki. Użyj sideEffects: ['*.css'], aby ochronić importy CSS przed usunięciem. Eksporty nazwane z osobnych plików zapewniają maksymalną szczegółowość tree-shakingu. Egzekwuj budżet rozmiaru za pomocą size-limit w CI. W bibliotekach preferuj CSS Modules zamiast CSS-in-JS, aby uniknąć konfliktów peer dependencies.

Bezpłatny start

Ucz się React dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
88
Lekcje
324

Często zadawane pytania

Czy lekcja „Zależności peer i tree shaking” jest bezpłatna?

Tak — pełny tekst „Zależności peer i tree shaking” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zależności peer i tree shaking”?

Deklarować React jako zależność peer, włączać tree shaking bez efektów ubocznych i testować opublikowany pakiet Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Zależności peer i tree shaking”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Bundlowanie bibliotek za pomocą Rollup i tsup
  2. Podwójny wynik pakietu ESM i CJS
  3. Zależności peer i tree shaking
  4. Publikowanie w npm i wersjonowanie semantyczne
← Powrót do React Academy