Bundlowanie bibliotek za pomocą Rollup i tsup
Konfigurować Rollup lub tsup do bundlowania komponentów React z prawidłowym wykluczeniem Reacta i ReactDOM z pakietu
Bundlowanie bibliotek za pomocą Rollup i tsup to bezpłatna lekcja React Academy na CoddyKit. To lekcja 1 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.
Dlaczego nie używać Vite do bibliotek
Domyślna konfiguracja Vite jest zoptymalizowana pod kątem aplikacji — pakuje wszystko, obsługuje zasoby i generuje plik index.html. Biblioteka komponentów wymaga innego formatu wyjściowego: czystych plików JavaScript ESM/CJS bez narzutu w czasie wykonywania, bez bundlowania Reacta oraz z prawidłowymi deklaracjami TypeScript. Tryb biblioteki Vite działa, ale Rollup i tsup są lepiej dostosowane do tego zastosowania.
Rollup: standard dla bibliotek
Rollup od lat jest standardowym bundlerem dla bibliotek JavaScript. Generuje czysty i wydajny kod wyjściowy, zapewnia doskonały tree-shaking oraz obsługuje formaty wyjściowe ESM i CJS. Scope hoisting w Rollup eliminuje narzut opakowań modułów, tworząc możliwie najmniejsze paczki biblioteki.
tsup: alternatywa bez konfiguracji
tsup to niewymagający konfiguracji bundler TypeScript oparty na esbuild. Jest znacznie szybszy od Rollup, ponieważ esbuild kompiluje kod w mikrosekundach, a nie w milisekundach. Minimalna konfiguracja: { entry: ['src/index.ts'], format: ['esm', 'cjs'], dts: true } automatycznie generuje oba formaty modułów oraz deklaracje TypeScript.
Najważniejsze opcje konfiguracji tsup
Najważniejsze opcje tsup: entry to tablica plików punktów wejścia. format określa formaty wyjściowe: ['esm', 'cjs']. dts: true generuje pliki deklaracji TypeScript .d.ts obok plików wyjściowych JS. target określa minimalne środowisko JavaScript (esnext lub es2020). splitting: false zachowuje dane wyjściowe w pojedynczych plikach.
Kompromisy między esbuild a Rollup
esbuild (za pośrednictwem tsup) kompiluje od 10 do 100 razy szybciej niż Rollup. Rollup generuje nieco lepiej zoptymalizowany wynik, oferując większą szczegółowość tree-shakingu i większą kontrolę nad granicami chunków. W przypadku większości bibliotek komponentów szybkość tsup jest korzystniejsza podczas pracy deweloperskiej. Gdy potrzebna jest maksymalna kontrola nad tree-shakingiem lub złożona konfiguracja z wieloma punktami wejścia, preferowany jest Rollup.
Oznaczanie React jako external
Najważniejsza konfiguracja bundlera w przypadku biblioteki React: nigdy nie bundluj React ani ReactDOM. Oznacz je jako external, aby wykluczyć je z wynikowego kodu. Jeśli biblioteka bundluje React, użytkownik końcowy otrzyma dwie kopie Reacta — jedną z biblioteki i drugą ze swojej aplikacji. Powoduje to nieprawidłowe działanie wszystkich hooków React z powodu wielu instancji React.
Konfigurowanie external w tsup
W konfiguracji tsup użyj opcji external: external: ['react', 'react-dom']. W konfiguracji Rollup ustaw external: ['react', 'react-dom', 'react/jsx-runtime']. Uwzględnij react/jsx-runtime, jeśli biblioteka korzysta z JSX Transform. Oznacz jako external także wszystkie inne peer dependencies zadeklarowane przez bibliotekę.
Wtyczki Rollup dla TypeScript
Minimalna konfiguracja Rollup dla biblioteki TypeScript wymaga trzech wtyczek: @rollup/plugin-typescript do kompilowania TypeScript, @rollup/plugin-node-resolve do rozwiązywania importów z node_modules oraz @rollup/plugin-commonjs do konwertowania zależności CommonJS na ESM w bundlu. Dodaj rollup-plugin-dts do obsługi plików deklaracji.
Struktura katalogu wynikowego
Typowy wynik biblioteki w dwóch formatach obejmuje: dist/esm/index.js i dist/esm/index.d.ts dla odbiorców ESM oraz dist/cjs/index.js i dist/cjs/index.cjs dla odbiorców CJS. Pole exports w package.json mapuje te ścieżki na właściwe środowiska. Pliki deklaracji TypeScript znajdują się obok odpowiadających im plików JS.
Wiele punktów wejścia
Duże biblioteki zyskują na wielu punktach wejścia, ponieważ odbiorcy importują tylko to, czego potrzebują. Przykład: entry: ['src/index.ts', 'src/utils.ts', 'src/hooks.ts']. Każdy punkt wejścia otrzymuje własne pliki wynikowe. Pole exports w package.json mapuje każdą publiczną ścieżkę na odpowiedni wynik: './utils' → './dist/utils.js'.
Skrypt build w package.json
Dodaj polecenie kompilowania do sekcji scripts w package.json: "build": "tsup". tsup odczytuje konfigurację z tsup.config.ts znajdującego się w katalogu głównym. Skrypt prepublish powinien uruchamiać kompilowanie: "prepublishOnly": "npm run build" gwarantuje, że pakiet zostanie zawsze zbudowany przed opublikowaniem w npm.
React jako external w bundlu biblioteki
Dlaczego podczas bundlowania biblioteki komponentów React należy oznaczyć React jako external?
Podsumowanie lekcji: bundlowanie biblioteki
tsup (oparty na esbuild) zapewnia szybkie bundlowanie bez konfiguracji, z ustawieniami format: ['esm', 'cjs'] i dts: true. Rollup oferuje bardziej szczegółową kontrolę nad tree-shakingiem dzięki @rollup/plugin-typescript. Najważniejsza zasada: zawsze oznaczaj react, react-dom i wszystkie peer dependencies jako external, aby nie bundlować ich z biblioteką. Generuj wynik w dist/esm/ i dist/cjs/ wraz z równoległymi deklaracjami TypeScript. Wiele punktów wejścia umożliwia odbiorcom precyzyjny tree-shaking.
Często zadawane pytania
Czy lekcja „Bundlowanie bibliotek za pomocą Rollup i tsup” jest bezpłatna?
Tak — pełny tekst „Bundlowanie bibliotek za pomocą Rollup i tsup” 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 „Bundlowanie bibliotek za pomocą Rollup i tsup”?
Konfigurować Rollup lub tsup do bundlowania komponentów React z prawidłowym wykluczeniem Reacta i ReactDOM z pakietu Ć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 1 z 4.
Ile czasu zajmuje lekcja „Bundlowanie bibliotek za pomocą Rollup i tsup”?
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