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
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.
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
- Bundlowanie bibliotek za pomocą Rollup i tsup
- Podwójny wynik pakietu ESM i CJS
- Zależności peer i tree shaking
- Publikowanie w npm i wersjonowanie semantyczne